ABSTRACT
Animal movements are often defined using the home range concept. Consequently, home ranges are determined by temporal, spatial, and individual-level processes. Within the environment, one of the key factors influencing an animal’s range and how it uses the environment is that of resources. Alterations to the environment that affect resource distribution and availability can have profound consequences on an animal’s spatial patterns. One of the best examples of this is that of golf courses. Certain environmental modifications exhibited by some human altered environments can have positive effects on certain wildlife species by altering their movement patterns and foraging efforts. We analyzed data collected from 22 Gila Monsters Heloderma suspectum at a subsidized environment in Arizona from 2007 to 2013 and 15 Gila Monsters from a non-subsidized environment from 2000 to 2002. We performed both kernel density estimation and minimum convex polygons for comparability purposes. After adjusting area estimates for sex, number of fixes, and year, males in the subsidized environment had an average overall area of 13.6 ha while the females had an area of 8.3 ha. In the unsubsidized environment, males had an average overall area of 43.2 ha while females had an area of 23.6 ha. Gila Monsters between the two environments also exhibited seasonal differences, primarily in the dry and monsoon seasons. There were also differences in home range overlap within and between sexes. In the subsidized population, there was very little male-male overlap with only two occurances, more female-female overlap and male-female overlap was increased. Male home ranges often overlapped several female home ranges. This suggests that Gila monster home ranges may be smaller in subsidized resource environments than those of un-subsidized environments due to increases in available resources.
Gila Monsters (Heloderma suspectum) and Human Altered Environments
Animal movements are often defined using the home range concept. Formally defined by William Burk in 1943 as, “that area traversed by the individual in its normal activities of foraging, mating, and caring for young. Occasional sallies outside the area, perhaps exploratory in nature, should not be considered part of the home range”. Consequently, home ranges are determined by temporal, spatial, and individual-level processes. Studying animal HR’s has been of special interest to a wide variety of researchers, including those studying relationships between behavior, age, sex, and spacing patterns, resource distribution as it affects space use, the relationship between metabolic requirements and home range size, and space requirements for purposes of controlling problematic species, conservation, and wildlife management.
Within an animals environment, one of the key factors influencing an animals range and how it uses the environment is that of resources. Alterations to the environment that affect resource distribution and availability can have profound consequences on an animals spatial patterns. Some of the best examples of this are alterations caused by human activities. Historically, human alterations to environments have been percieved as having negative consequences on local wildlife populations. However, certain environmental modifications can have positive effects on various wildlife species. This is seen in the implementation of certain golf courses, and green areas. One of the key consequences of golf courses, especially those placed in desert environments is the water irrigation supplementation and horticulture that comes with them. As a result, this enhances primary productivity which increases the presence of vertebrate animals that take advantage of that increase in productivity. In reptiles, faster growth is often correlated with increases in precipitation and available resources. A Recent study has shown that Gila Monsters Heloderma suspectum inhabiting a golf course in the upland Sonoran of Arizona grew larger and faster than unsubsidized populations.
Gila Monsters occupy the hot desert regions of the Mohave Desert in the extreme southeastern Nevada, south through the Sonoran Desert of Arizona into Sonora and northern Sinaloa, Mexico. Gilas are known to be “widely foraging” animals due to their specialization in feeding on the young and eggs of small vertebrate nests. These characteristics and findings make this species a good candidate for studying the potential alterations to animal home ranges that nutrient subsidized areas such as golf courses may have on animal populations.

Study Site
For the subsidized resource population occupying a human altered environment, spatial data was collected on 22 Gila Monsters, 13 females and 9 males at Stone Canyon Golf Club, located in Pima County, Arizona at the base of the Tortolita Mountains. Stone Canyon is a golf club with an area of approximately 345 hectares, consisting of vegetation that is typical of Sonoran desertscrub habitat of the Arizona uplands. Elevation ranges from 900m-1000m, with the landscape consisting of granite outcrop hills with large boulders throughout, interrupted by watered fairways, ponds and paved cart paths. This golf course possesses a partially urbanized housing development with properties encompassing the perimeter of the course.

Figure 1 | Stone Canyon Golf Club, located in Oro Valley, Arizona on the northern edge of Tucson, Arizona.
For the comparison site, the unsubsidized natural population was represented using spatial data that was collected on 15 Gila Monsters, 6 males, 6 females and 3 sub-adults from 2000-2002 using radio-telemetry at Owl Head Buttes, Arizona. Located in Arizona upland Sonoran Desert approximately 19 km north northeast of Stone Canyon, the Owl Head Buttes study site was an area of approximately 200 hectares, with an elevation range of 800m-900m, and discontinuous southern buttes of rocky outcrops. Owl Head harbors no urbanized development or other human altered environments aside from highly spaced unpaved dirt access roads throughout the surrounding area.

Overall Yearly Home Ranges (MCP)
Summary of home range size.
Table 1 | Pooled overall home ranges of Gila Monsters at Owl Head Buttes and Stone Canyon Golf Club. Both 100% and 95% MCPs were calculated between both populations.
| 2000 |
1 |
female |
nonsubsidized |
25.20 |
42 |
23.00 |
38 |
| _ |
2 |
male |
nonsubsidized |
28.70 |
125 |
24.50 |
112 |
| _ |
3 |
male |
nonsubsidized |
82.70 |
89 |
68.40 |
78 |
| _ |
4 |
male |
nonsubsidized |
55.60 |
80 |
40.50 |
73 |
| 2001 |
1 |
female |
nonsubsidized |
20.10 |
26 |
NA |
NA |
| _ |
2 |
male |
nonsubsidized |
23.50 |
10 |
NA |
NA |
| _ |
3 |
male |
nonsubsidized |
60.10 |
18 |
NA |
NA |
| _ |
4 |
male |
nonsubsidized |
24.40 |
21 |
NA |
NA |
| _ |
10 |
male |
nonsubsidized |
28.50 |
14 |
NA |
NA |
| _ |
11 |
male |
nonsubsidized |
10.60 |
22 |
NA |
NA |
| _ |
12 |
male |
nonsubsidized |
23.60 |
7 |
NA |
NA |
| _ |
13 |
female |
nonsubsidized |
8.90 |
9 |
NA |
NA |
| _ |
15 |
female |
nonsubsidized |
13.00 |
11 |
NA |
NA |
| _ |
50 |
female |
nonsubsidized |
21.00 |
11 |
NA |
NA |
| _ |
51 |
female |
nonsubsidized |
7.10 |
8 |
NA |
NA |
| 2002 |
2 |
male |
nonsubsidized |
66.20 |
38 |
40.00 |
37 |
| _ |
4 |
male |
nonsubsidized |
73.10 |
76 |
55.50 |
73 |
| _ |
10 |
male |
nonsubsidized |
39.50 |
111 |
33.30 |
105 |
| _ |
11 |
male |
nonsubsidized |
39.30 |
92 |
31.90 |
88 |
| _ |
12 |
male |
nonsubsidized |
49.50 |
66 |
41.50 |
63 |
| _ |
13 |
female |
nonsubsidized |
26.30 |
101 |
23.70 |
96 |
| _ |
15 |
female |
nonsubsidized |
39.20 |
98 |
21.30 |
94 |
| _ |
17 |
female |
nonsubsidized |
47.60 |
106 |
29.10 |
101 |
| _ |
50 |
female |
nonsubsidized |
15.80 |
68 |
14.10 |
66 |
| _ |
51 |
female |
nonsubsidized |
18.50 |
57 |
12.40 |
57 |
| 2007 |
F104 |
female |
subsidized |
3.37 |
18 |
3.37 |
19 |
| _ |
F114 |
female |
subsidized |
2.51 |
8 |
0.58 |
7 |
| _ |
F36 |
female |
subsidized |
5.05 |
20 |
3.49 |
19 |
| _ |
F66 |
female |
subsidized |
10.23 |
22 |
5.56 |
20 |
| _ |
M112 |
male |
subsidized |
12.51 |
13 |
12.51 |
12 |
| _ |
M14 |
male |
subsidized |
4.66 |
15 |
3.87 |
14 |
| 2008 |
F104 |
female |
subsidized |
4.97 |
53 |
3.47 |
50 |
| _ |
F114 |
female |
subsidized |
11.96 |
52 |
9.38 |
49 |
| _ |
F135 |
female |
subsidized |
4.07 |
16 |
1.58 |
15 |
| _ |
F137 |
female |
subsidized |
5.98 |
15 |
5.75 |
14 |
| _ |
F36 |
female |
subsidized |
9.73 |
54 |
7.55 |
51 |
| _ |
F66 |
female |
subsidized |
11.29 |
51 |
9.95 |
48 |
| _ |
M119 |
male |
subsidized |
25.01 |
58 |
20.23 |
55 |
| 2009 |
F104 |
female |
subsidized |
7.45 |
64 |
7.25 |
62 |
| _ |
F114 |
female |
subsidized |
11.46 |
52 |
8.28 |
49 |
| _ |
F135 |
female |
subsidized |
6.21 |
62 |
5.47 |
58 |
| _ |
F137 |
female |
subsidized |
6.09 |
35 |
5.68 |
33 |
| _ |
F147 |
female |
subsidized |
17.90 |
50 |
14.04 |
48 |
| _ |
F36 |
female |
subsidized |
7.48 |
62 |
5.83 |
60 |
| _ |
F66 |
female |
subsidized |
12.20 |
67 |
11.01 |
66 |
| _ |
M112 |
female |
subsidized |
7.89 |
71 |
1.73 |
70 |
| _ |
M119 |
male |
subsidized |
22.62 |
18 |
16.37 |
16 |
| _ |
M69 |
male |
subsidized |
1.91 |
69 |
1.91 |
69 |
| _ |
F146 |
female |
subsidized |
9.94 |
20 |
8.49 |
17 |
| 2010 |
F114 |
female |
subsidized |
9.65 |
44 |
8.30 |
41 |
| _ |
F137 |
female |
subsidized |
6.32 |
45 |
5.26 |
42 |
| _ |
F147 |
female |
subsidized |
16.65 |
36 |
14.75 |
34 |
| _ |
F200 |
female |
subsidized |
5.36 |
34 |
5.23 |
33 |
| _ |
F214 |
female |
subsidized |
7.38 |
27 |
3.01 |
25 |
| _ |
F36 |
female |
subsidized |
38.81 |
50 |
12.16 |
47 |
| _ |
F66 |
female |
subsidized |
28.96 |
52 |
16.22 |
49 |
| _ |
M112 |
male |
subsidized |
20.46 |
26 |
14.41 |
24 |
| _ |
M119 |
male |
subsidized |
17.46 |
31 |
9.70 |
29 |
| _ |
M69 |
male |
subsidized |
13.85 |
30 |
10.75 |
28 |
| 2011 |
F114 |
female |
subsidized |
5.91 |
22 |
3.30 |
20 |
| _ |
F137 |
female |
subsidized |
4.80 |
33 |
4.28 |
31 |
| _ |
F147 |
female |
subsidized |
19.44 |
24 |
12.90 |
22 |
| _ |
F200 |
female |
subsidized |
8.35 |
28 |
7.66 |
27 |
| _ |
F214 |
female |
subsidized |
6.61 |
22 |
5.66 |
21 |
| _ |
F252 |
female |
subsidized |
3.09 |
17 |
1.60 |
16 |
| _ |
F36 |
female |
subsidized |
11.93 |
23 |
10.95 |
21 |
| _ |
F66 |
female |
subsidized |
5.72 |
5 |
0.66 |
4 |
| _ |
M14 |
male |
subsidized |
4.48 |
13 |
3.84 |
12 |
| _ |
M215 |
male |
subsidized |
11.47 |
16 |
11.47 |
15 |
| _ |
M255 |
male |
subsidized |
5.85 |
16 |
5.59 |
15 |
| 2012 |
F114 |
female |
subsidized |
10.17 |
54 |
7.15 |
51 |
| _ |
F137 |
female |
subsidized |
2.06 |
13 |
1.36 |
12 |
| _ |
F147 |
female |
subsidized |
17.64 |
52 |
16.75 |
49 |
| _ |
F252 |
female |
subsidized |
5.19 |
53 |
3.63 |
50 |
| _ |
F36 |
female |
subsidized |
10.34 |
52 |
10.30 |
49 |
| _ |
M14 |
male |
subsidized |
4.42 |
13 |
3.77 |
12 |
| _ |
M215 |
male |
subsidized |
11.04 |
21 |
9.85 |
20 |
| _ |
M255 |
male |
subsidized |
8.21 |
13 |
5.39 |
12 |
| 2013 |
F114 |
female |
subsidized |
1.16 |
7 |
0.28 |
6 |
| _ |
F147 |
female |
subsidized |
0.31 |
6 |
0.00 |
5 |
| _ |
F252 |
female |
subsidized |
NA |
4 |
NA |
NA |
| _ |
F36 |
female |
subsidized |
0.13 |
6 |
0.00 |
5 |
Overall combined 100% MCP means averages across sex
| nonsubsidized |
25 |
33.92000 |
20.793689 |
4.1587378 |
8.583213 |
| subsidized |
54 |
10.46278 |
6.897586 |
0.9386426 |
1.882679 |
Gila Monster Home Range Sizes at Stone Canyon vs. Owl Head Buttes.

Table 2 | Raw group 100% MCP home range means of Stone Canyon and Owl Head Buttes. Grouped by environment and sex.
| nonsubsidized |
female |
11 |
22.063636 |
12.287414 |
3.704795 |
8.254797 |
| nonsubsidized |
male |
14 |
43.235714 |
21.672372 |
5.792185 |
12.513255 |
| subsidized |
female |
37 |
9.836757 |
6.984007 |
1.148164 |
2.328584 |
| subsidized |
male |
17 |
11.825294 |
6.706133 |
1.626476 |
3.447976 |
Table 3 | Raw group 95% MCP home range means of raw data of Stone Canyon and Owl Head Buttes. Grouped by environment and sex.
| nonsubsidized |
female |
6 |
20.600000 |
6.286493 |
2.5664502 |
6.597270 |
| nonsubsidized |
male |
8 |
41.950000 |
13.987954 |
4.9454886 |
11.694222 |
| subsidized |
female |
37 |
7.132432 |
4.339651 |
0.7134342 |
1.446912 |
| subsidized |
male |
17 |
9.037059 |
4.934157 |
1.1967090 |
2.536910 |
Gila Monster Yearly Home Range Shifts of 100% MCPs.

Repeated measures ANOVA for Yearly Home Ranges.
ANOVA Table: 100% MCP
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Environment 688.97 688.97 1 71.486 8.3567 0.0050859 **
Year 31.66 31.66 1 71.627 0.3840 0.5374340
Sex 1375.22 1375.22 1 24.656 16.6803 0.0004079 ***
N100 1797.13 1797.13 1 54.913 21.7978 1.994e-05 ***
Environment:Sex 445.09 445.09 1 25.582 5.3986 0.0283770 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
ANOVA Table: 95% MCP
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Environment 446.03 446.03 1 61.925 30.2487 7.669e-07 ***
Year 14.03 14.03 1 39.326 0.9515 0.335306
Sex 426.44 426.44 1 29.915 28.9198 8.086e-06 ***
N100 14.22 14.22 1 39.534 0.9646 0.332015
Environment:Sex 145.74 145.74 1 30.669 9.8835 0.003687 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Table 4. Directional means of home range after being adjusted for year, sex and sample size.
Table 4. Directional means of home range after being adjusted for year, sex and sample size.
| nonsubsidized |
female |
23.739759 |
6.015077 |
66.85165 |
11.733125 |
35.74639 |
| subsidized |
female |
8.314934 |
3.281775 |
46.24553 |
1.710009 |
14.91986 |
| nonsubsidized |
male |
43.412310 |
6.061028 |
66.27236 |
31.312006 |
55.51261 |
| subsidized |
male |
13.146356 |
3.754579 |
53.70952 |
5.617946 |
20.67477 |
Post-Hoc comparisons between sexes and environment:
$emmeans
Environment = nonsubsidized:
Sex emmean SE df lower.CL upper.CL
female 23.59 6.00 66.8 11.60 35.6
male 43.24 6.05 66.3 31.17 55.3
Environment = subsidized:
Sex emmean SE df lower.CL upper.CL
female 8.33 3.23 46.6 1.83 14.8
male 13.68 3.89 49.2 5.87 21.5
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Environment = nonsubsidized:
contrast estimate SE df t.ratio p.value
female - male -19.66 4.86 31.6 -4.044 0.0003
Environment = subsidized:
contrast estimate SE df t.ratio p.value
female - male -5.36 3.81 31.8 -1.405 0.1697
Graphical Comparisons of Sex Within Each Environment:

Figure 6 | Pairwise comparisons of home range between sexes within each environment. If red arrows overlap those of others, then there is no significant statistical difference.
$emmeans
Sex = female:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 23.59 6.00 66.8 11.60 35.6
subsidized 8.33 3.23 46.6 1.83 14.8
Sex = male:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 43.24 6.05 66.3 31.17 55.3
subsidized 13.68 3.89 49.2 5.87 21.5
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Sex = female:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized 15.3 8.31 68.7 1.837 0.0705
Sex = male:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized 29.6 8.69 68.3 3.403 0.0011
Graphical Comparisons of Sex between the two populations:

Figure 7 | Pairwise comparisons of sex between environments. If red arrows overlap those of others, then there is no significant statistical difference.
At Stone Canyon, male yearly home ranges ranged from 1.91 - 25.1 ha, with a mean of 11.8 ± 1.7 S.E. ha (100% MCP), 9.2 ± 1.3 S.E. Ha (95% MCP). Female home ranges ranged from 2.06 – 38.81 ha and a mean of 9.8 ± 1.1 S.E. ha (100% MCP), 7.1 ± 0.7 S.E. ha (95% MCP). Male Gila Monsters at Owl head Buttes had home ranges that ranged from 10.6 – 82.7 ha with a mean of 43.2 ± 5.7 S.E. ha (100% MCP), 41.9 ± 4.9 S.E. ha (95% MCP). Female home ranges ranged from 7.1 – 47.6 with a mean of 22.0 ± 3.7 S.E. ha (100% MCP), 20.6 ± 2.5 S.E. ha (95% MCP). In the analyses of both populations, year had no effect on home range sizes (F = 0.38, P = 0.54), while there was a detected significant difference in home ranges between the two populations (F = 8.35, P = 0.005), as well as sex (F = 16.68, P = 0.0004). Post-Hoc analyses between sexes indicated that there was a significant difference in male home ranges between the two environments (df = 68.3, P = 0.001). There was a slight difference of female home ranges between the two environments, however it was not statistically significant (df = 68.7, P = 0.07). At stone canyon there was no major difference between male and female home ranges (df = 31.8, P = 0.16) with male home range being only 3% larger than females. Males at Owl Head Buttes had a 65% larger home range than did females, and was statistically significant (df = 31.3, P = 0.0003). Interestingly, males at Stone Canyon had smaller home ranges than did the females at Owl Head Buttes (Table x) When using 95% MCPs, male home ranges reduced by 25% and female range by 31%. At Owl Head Buttes, Gila Monsters showed a similar behavior with male home ranges reduced by 20% and female ranges reduced by 26% using 95% MCPs.
Overall Yearly Home Ranges (KDE)
Home range estimation on the Stone Canyon Gila Monsters using 95% KDEs with href bandwidth produced male home ranges ranging from 14.5 – 55.3 ha with a mean of 35.0 ± 3.3 S.E. ha. Female home ranges ranged from 10.1 – 47.8 ha with a mean of 22.9 ± 1.8 S.E. KDE estimates for male and female home ranges were 96% and 80% larger than MCP estimates. Repeated Measures analysis of KDEs suggested that there was a small significant difference between male and female home ranges at Stone Canyon (F = 5.56, P = 0.009). Year did not have an effect on home ranges (F = 0.57, P = 0.45).
Yearly KDE Home Ranges
| 2007 |
F104 |
female |
subsidized |
13.84 |
18 |
3.69 |
15 |
| NA |
F36 |
female |
subsidized |
16.51 |
20 |
4.26 |
16 |
| NA |
F66 |
female |
subsidized |
32.31 |
22 |
7.86 |
17 |
| NA |
M67 |
male |
subsidized |
NA |
16 |
8.97 |
12 |
| NA |
M112 |
male |
subsidized |
NA |
13 |
15.42 |
11 |
| NA |
M14 |
male |
subsidized |
14.52 |
15 |
3.76 |
12 |
| NA |
M67 |
male |
subsidized |
35.47 |
14 |
8.97 |
10 |
| 2008 |
F104 |
female |
subsidized |
13.22 |
53 |
2.61 |
42 |
| NA |
F114 |
female |
subsidized |
20.55 |
52 |
3.68 |
38 |
| NA |
F135 |
female |
subsidized |
11.36 |
16 |
2.19 |
12 |
| NA |
F137 |
female |
subsidized |
20.51 |
15 |
5.61 |
14 |
| NA |
F36 |
female |
subsidized |
18.89 |
54 |
4.98 |
41 |
| NA |
F66 |
female |
subsidized |
39.30 |
50 |
9.97 |
43 |
| NA |
M119 |
male |
subsidized |
47.65 |
58 |
12.18 |
43 |
| 2009 |
F104 |
female |
subsidized |
19.11 |
64 |
4.63 |
14 |
| NA |
F114 |
female |
subsidized |
20.34 |
52 |
4.08 |
43 |
| NA |
F135 |
female |
subsidized |
14.43 |
62 |
4.43 |
50 |
| NA |
F137 |
female |
subsidized |
16.94 |
35 |
4.99 |
32 |
| NA |
F147 |
female |
subsidized |
39.67 |
62 |
9.06 |
52 |
| NA |
F36 |
female |
subsidized |
13.96 |
67 |
3.20 |
52 |
| NA |
F66 |
female |
subsidized |
25.90 |
71 |
6.35 |
69 |
| NA |
M112 |
female |
subsidized |
NA |
18 |
14.27 |
17 |
| NA |
M119 |
male |
subsidized |
49.53 |
69 |
12.55 |
61 |
| NA |
M69 |
male |
subsidized |
NA |
NA |
NA |
NA |
| NA |
F146 |
female |
subsidized |
20.17 |
43 |
3.97 |
31 |
| 2010 |
F114 |
female |
subsidized |
21.06 |
44 |
6.08 |
35 |
| NA |
F137 |
female |
subsidized |
13.24 |
45 |
3.33 |
13 |
| NA |
F147 |
female |
subsidized |
34.73 |
36 |
7.13 |
28 |
| NA |
F200 |
female |
subsidized |
20.37 |
34 |
4.09 |
25 |
| NA |
F214 |
female |
subsidized |
14.97 |
27 |
3.56 |
24 |
| NA |
F36 |
female |
subsidized |
47.49 |
50 |
9.73 |
37 |
| NA |
F66 |
female |
subsidized |
47.77 |
52 |
7.26 |
33 |
| NA |
M112 |
male |
subsidized |
55.25 |
26 |
8.60 |
21 |
| NA |
M119 |
male |
subsidized |
33.88 |
31 |
7.14 |
22 |
| NA |
M69 |
male |
subsidized |
37.45 |
30 |
10.49 |
22 |
| NA |
F146 |
female |
subsidized |
33.84 |
9 |
8.39 |
7 |
| 2011 |
F114 |
female |
subsidized |
13.82 |
22 |
2.66 |
17 |
| NA |
F137 |
female |
subsidized |
12.12 |
33 |
2.65 |
25 |
| NA |
F147 |
female |
subsidized |
43.80 |
24 |
9.66 |
17 |
| NA |
F200 |
female |
subsidized |
23.96 |
28 |
6.86 |
26 |
| NA |
F214 |
female |
subsidized |
23.39 |
22 |
5.91 |
18 |
| NA |
F252 |
female |
subsidized |
8.55 |
17 |
1.94 |
14 |
| NA |
F36 |
female |
subsidized |
34.90 |
23 |
8.81 |
20 |
| NA |
M14 |
male |
subsidized |
20.36 |
12 |
5.27 |
10 |
| NA |
M215 |
male |
subsidized |
46.26 |
16 |
11.74 |
15 |
| NA |
M255 |
male |
subsidized |
30.10 |
16 |
8.25 |
15 |
| 2012 |
F114 |
female |
subsidized |
21.04 |
54 |
5.41 |
45 |
| NA |
F137 |
female |
subsidized |
7.87 |
13 |
1.24 |
10 |
| NA |
F147 |
female |
subsidized |
32.98 |
52 |
7.74 |
36 |
| NA |
F252 |
female |
subsidized |
10.09 |
53 |
1.83 |
39 |
| NA |
F36 |
female |
subsidized |
27.59 |
52 |
7.67 |
39 |
| NA |
M14 |
male |
subsidized |
24.02 |
13 |
6.49 |
10 |
| NA |
M215 |
male |
subsidized |
28.52 |
21 |
7.31 |
15 |
| NA |
M255 |
male |
subsidized |
32.03 |
13 |
8.27 |
11 |
Table | Raw Group 95% KDE home range means of Stone Canyon and Owl Head Buttes. Grouped by environment and sex.
| female |
36 |
23.06722 |
11.19254 |
1.865424 |
3.787012 |
| male |
14 |
33.94357 |
12.24405 |
3.272359 |
7.069503 |
Repeated measures ANOVA for KDE Home Ranges.
Repeated Measure ANOVA for 95% KDE overall home ranges
ANOVA Table for 95% KDE (subsidized)
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Year 33.40 33.40 1 39.996 0.5754 0.452584
Sex 497.09 497.09 1 17.713 8.5619 0.009133 **
N 21.54 21.54 1 37.466 0.3710 0.546150
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Repeated Measure ANOVA for 50% KDE overall home ranges
Error in eval(predvars, data, env) : object 'Home_Range_50kde' not found
ANOVA Table for 50% KDE (subsidized)

Table | Directional means of KDE home ranges after being adjusted for year, sex and sample size.
| Dry |
female |
19.994371 |
4.908047 |
41.49770 |
10.085978 |
29.90277 |
| Emergence |
female |
17.014928 |
7.237399 |
42.42000 |
2.413550 |
31.61631 |
| Monsoon |
female |
19.938055 |
5.254150 |
40.80049 |
9.325509 |
30.55060 |
| Post_Monsoon |
female |
14.969630 |
5.291163 |
41.32600 |
4.286469 |
25.65279 |
| Dry |
male |
43.417018 |
6.385092 |
42.14273 |
30.532673 |
56.30136 |
| Emergence |
male |
17.576519 |
15.469710 |
43.58838 |
-13.608952 |
48.76199 |
| Monsoon |
male |
31.849802 |
5.728078 |
42.22605 |
20.291905 |
43.40770 |
| Post_Monsoon |
male |
2.648851 |
9.134861 |
43.32296 |
-15.769382 |
21.06708 |
Seasonal Home Range
Seasonal Home Range.
Home range analysis broken down by five seasons; Emergence, Dry, Monsoon, Post Monsoon. The start of emergence was defined by when movement patterns increased from none/minimal to the start of high activity. Effort was taken to match as closely as possible to the Owl Head Buttes emergence date interval. Monsoon season was adjusted using NOAA climate data. The start of was defined when the mean dew point temperatures of three consecutive days were greater than 55 degrees.
Scaling home range analyses by seasonal estimates reduces the number or locations for each lizard. 100% MCPs were used for seasonal home range analyses to avoid any further reduction of locations for each estimation.

Seasonal home ranges at Stone Canyon varied in size between seasons but did not seem shift (Fig.___), with seasonal home ranges overlapping each other, only expanding or collapsing between seasons. Home range patterns at Stone Canyon did not display the same seasonal variation in home range sizes that was observed at Owl Head Buttes. At Stone Canyon, Gila Monsters had relatively smaller home ranges throughout the year, where the highest inflation of range size was observed during the dry season from an increase in male home ranges, 18.2 ± 5.4 S.E. ha to that of female home range sizes at 10.1 ± 2.4 S.E. ha. Females at Stone Canyon displayed similar home ranges during the monsoon season, 10.6 ± 2.5 S.E. ha. Home range sizes at Owl Head Buttes had a much larger amount of variation across seasons than did those at Stone Canyon. There were still slightly larger ranges observed during the dry season, primarily due to increased home range sizes exhibited by males 29.4 ± 4.7 S.E. ha versus females at 15.6 ± 3.8 S.E. ha. During the monsoon season, there was still yet a large influx of home ranges sizes where female home ranges increased to 22.9 ± 4.0 S.E. ha. For both populations, home ranges during the emergence and post-monsoon seasons were small, marking the beginning and ending of overwintering periods, where minimal movement is observed in both groups.
Analysis indicated that there was an effect of season (df = 3, F = 15.41, P = <0.001) as well as an interaction of environment and season (df = 3, F = 6.84, P = <0.001), indicating that changes in seasonal home ranges sizes varied between each environment. Post-Hoc analyses on the Stone Canyon data set with home range means averaged across sex, suggested that there was no significant difference in home ranges between the emergence (4.32 ± 2.55 S.E. ha) and post-monsoon seasons (5.09 ± 2.07 S.E. ha) nor dry and monsoon (12.23 ± 1.74 S.E. ha and 9.04 ± 1.78 S.E. ha). There was also no significance between emergence and dry/monsoon seasons, but there was a difference between dry and post-monsoon (df = 80.2, P = 0.04). Post-Hoc analyses on the Owl Head Buttes population indicated that there was no significant difference between emergence (3.33 ± 2.24 S.E. ha) and post-monsoon (2.36 ± 2.36 S.E.) nor dry and monsoon (18.86 ± 2.25 S.E. ha and 21.85 ± 2.03 S.E. ha) reflecting the same pattern at Stone Canyon. However, there was a significant difference between emergence and dry/monsoon (df = 69.4, P = <0.0001, and df = 68, P = <0.0001 respectively), as well as post-monsoon and dry/monsoon (df = 78.9, P = <0.0001, and df = 74, P = <0.0001). This shows a rather different pattern than seen at Stone Canyon. Pairwise analyses between the two populations indicated no difference between emergence (df = 87.7, P = 0.76) or post-monsoon (df = 89.4, P = 0.35). Differences in home range sizes between the two populations were between the dry and monsoon seasons (Fig.___). Owl Head home ranges were 58% larger than those at Stone Canyon during the dry season, and 76% larger during the monsoon season.
Table 5 | Group means of seasonal home ranges between Stone Canyon (subsidized) and Owl Head Buttes (non-subsidized). These means are averaged across sex.
| nonsubsidized |
Dry |
12 |
23.7166667 |
12.841682 |
3.7070742 |
8.159215 |
| nonsubsidized |
Emergence |
10 |
2.8100000 |
3.121414 |
0.9870776 |
2.232925 |
| nonsubsidized |
Monsoon |
13 |
23.6538462 |
9.446482 |
2.6199828 |
5.708452 |
| nonsubsidized |
Post_Monsoon |
11 |
0.6909091 |
1.013365 |
0.3055411 |
0.680788 |
| subsidized |
Dry |
17 |
13.0364706 |
10.574940 |
2.5647997 |
5.437133 |
| subsidized |
Emergence |
9 |
2.0977778 |
1.649566 |
0.5498555 |
1.267969 |
| subsidized |
Monsoon |
18 |
10.5600000 |
7.518662 |
1.7721657 |
3.738943 |
| subsidized |
Post_Monsoon |
14 |
2.9885714 |
5.044404 |
1.3481737 |
2.912552 |
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Environment 261.63 261.63 1 26.365 5.8375 0.0229042 *
Season 2072.56 690.85 3 78.967 15.4143 5.534e-08 ***
Sex 108.84 108.84 1 29.115 2.4285 0.1299532
N 335.38 335.38 1 72.754 7.4829 0.0078202 **
Environment:Season 920.94 306.98 3 71.524 6.8493 0.0004028 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Table 6 | Seasonal home range means between Stone Canyon (subsidized) and Owl Head Buttes (non-subsidized) popuations for males and females. These are raw means before being adjusted for environment, season, sex, and sample size.
| nonsubsidized |
Dry |
female |
5 |
15.6600000 |
8.6291946 |
3.8590932 |
10.7145603 |
| nonsubsidized |
Dry |
male |
7 |
29.4714286 |
12.6476235 |
4.7803524 |
11.6971008 |
| nonsubsidized |
Emergence |
female |
5 |
4.4600000 |
3.4333657 |
1.5354478 |
4.2630866 |
| nonsubsidized |
Emergence |
male |
5 |
1.1600000 |
1.8242807 |
0.8158431 |
2.2651436 |
| nonsubsidized |
Monsoon |
female |
6 |
22.9833333 |
9.8151753 |
4.0070285 |
10.3003948 |
| nonsubsidized |
Monsoon |
male |
7 |
24.2285714 |
9.8668999 |
3.7293376 |
9.1253605 |
| nonsubsidized |
Post_Monsoon |
female |
4 |
1.4000000 |
1.4491377 |
0.7245688 |
2.3059014 |
| nonsubsidized |
Post_Monsoon |
male |
7 |
0.2857143 |
0.3670993 |
0.1387505 |
0.3395102 |
| subsidized |
Dry |
female |
11 |
10.1754545 |
8.0883118 |
2.4387178 |
5.4338018 |
| subsidized |
Dry |
male |
6 |
18.2816667 |
13.2661214 |
5.4158714 |
13.9219406 |
| subsidized |
Emergence |
female |
6 |
2.1133333 |
1.8474920 |
0.7542354 |
1.9388239 |
| subsidized |
Emergence |
male |
3 |
2.0666667 |
1.5326556 |
0.8848792 |
3.8073277 |
| subsidized |
Monsoon |
female |
11 |
10.6918182 |
8.4988679 |
2.5625051 |
5.7096172 |
| subsidized |
Monsoon |
male |
7 |
10.3528571 |
6.3010018 |
2.3815548 |
5.8274547 |
| subsidized |
Post_Monsoon |
female |
11 |
3.6309091 |
5.5527983 |
1.6742317 |
3.7304207 |
| subsidized |
Post_Monsoon |
male |
3 |
0.6333333 |
0.8007705 |
0.4623250 |
1.9892241 |

Adjusted Seasonal Means

Post-Hoc comparisons between populations for seasonal home range analysis:
$emmeans
Season = Dry:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 18.86 2.25 88.4 14.383 23.34
subsidized 12.23 1.75 87.4 8.745 15.72
Season = Emergence:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 3.33 2.24 88.7 -1.118 7.77
subsidized 4.32 2.55 84.7 -0.741 9.39
Season = Monsoon:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 21.85 2.03 87.5 17.811 25.89
subsidized 9.04 1.78 86.0 5.515 12.57
Season = Post_Monsoon:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 2.36 2.36 87.0 -2.322 7.04
subsidized 5.09 2.07 85.8 0.981 9.21
Results are averaged over the levels of: Sex
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Season = Dry:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized 6.629 2.81 88.3 2.358 0.0206
Season = Emergence:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized -0.996 3.32 87.7 -0.300 0.7648
Season = Monsoon:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized 12.808 2.66 87.2 4.814 <.0001
Season = Post_Monsoon:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized -2.734 2.96 89.4 -0.924 0.3581
Results are averaged over the levels of: Sex
Graphical Comparisons of seasons between the two populatins:

Figure 11 | Pairwise comparisons of each season between environments. Overlapping red bars indicate no statistical difference.
$emmeans
Environment = nonsubsidized:
Season emmean SE df lower.CL upper.CL
Dry 18.86 2.25 88.4 14.383 23.34
Emergence 3.33 2.24 88.7 -1.118 7.77
Monsoon 21.85 2.03 87.5 17.811 25.89
Post_Monsoon 2.36 2.36 87.0 -2.322 7.04
Environment = subsidized:
Season emmean SE df lower.CL upper.CL
Dry 12.23 1.75 87.4 8.745 15.72
Emergence 4.32 2.55 84.7 -0.741 9.39
Monsoon 9.04 1.78 86.0 5.515 12.57
Post_Monsoon 5.09 2.07 85.8 0.981 9.21
Results are averaged over the levels of: Sex
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Environment = nonsubsidized:
contrast estimate SE df t.ratio p.value
Dry - Emergence 15.532 3.07 69.4 5.054 <.0001
Dry - Monsoon -2.992 2.89 67.3 -1.036 0.7292
Dry - Post_Monsoon 16.500 3.24 78.9 5.098 <.0001
Emergence - Monsoon -18.524 2.91 68.0 -6.361 <.0001
Emergence - Post_Monsoon 0.968 3.08 73.0 0.314 0.9891
Monsoon - Post_Monsoon 19.492 3.03 74.0 6.426 <.0001
Environment = subsidized:
contrast estimate SE df t.ratio p.value
Dry - Emergence 7.907 3.11 88.6 2.543 0.0602
Dry - Monsoon 3.187 2.28 66.0 1.395 0.5070
Dry - Post_Monsoon 7.137 2.68 80.2 2.666 0.0450
Emergence - Monsoon -4.720 3.20 89.6 -1.475 0.4569
Emergence - Post_Monsoon -0.769 2.94 77.2 -0.262 0.9937
Monsoon - Post_Monsoon 3.951 2.78 84.9 1.421 0.4899
Results are averaged over the levels of: Sex
P value adjustment: tukey method for comparing a family of 4 estimates
Graphical Comparisons between seasons within the two populations:

Figure 12 | Pairwise comparisons between seasons within each environment against estimated marginal means. Overlapping red bars indicate no statistical difference.
$emmeans
Season = Dry:
Sex emmean SE df lower.CL upper.CL
female 6.92 2.19 47.2 2.523 11.3
male 20.36 2.77 48.3 14.798 25.9
Season = Emergence:
Sex emmean SE df lower.CL upper.CL
female 5.00 2.91 45.2 -0.853 10.9
male 5.63 4.00 49.0 -2.403 13.7
Season = Monsoon:
Sex emmean SE df lower.CL upper.CL
female 6.27 2.34 46.2 1.560 11.0
male 11.39 2.51 48.4 6.354 16.4
Season = Post_Monsoon:
Sex emmean SE df lower.CL upper.CL
female 5.94 2.09 47.9 1.738 10.1
male 3.09 3.99 48.5 -4.937 11.1
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Season = Dry:
contrast estimate SE df t.ratio p.value
female - male -13.441 3.68 47.2 -3.653 0.0006
Season = Emergence:
contrast estimate SE df t.ratio p.value
female - male -0.632 4.73 49.0 -0.134 0.8943
Season = Monsoon:
contrast estimate SE df t.ratio p.value
female - male -5.121 3.53 47.1 -1.449 0.1539
Season = Post_Monsoon:
contrast estimate SE df t.ratio p.value
female - male 2.847 4.36 48.9 0.652 0.5173
Graphical Comparisons between sex within the subsidized population:

Table 7 | Mean individual seasonal home ranges pooled from the entire study period. Missing values are depicted where no locations for that animal during that period were successfull.
Seasonal Individual Home Ranges (MCP).
| Lizard |
Sex |
Area (ha) |
N |
Area |
N |
Area |
N |
Area |
N |
| M69 |
Male |
0.33 |
4.00 |
36.73 |
24.00 |
14.84 |
22.00 |
0.07 |
8.00 |
| M67 |
Male |
NA |
NA |
5.71 |
9.00 |
7.72 |
7.00 |
NA |
NA |
| M255 |
Male |
3.23 |
7.00 |
NA |
NA |
1.07 |
9.00 |
NA |
NA |
| M215 |
Male |
2.64 |
7.00 |
8.28 |
11.00 |
7.22 |
12.00 |
NA |
NA |
| M14 |
Male |
NA |
NA |
6.20 |
15.00 |
7.50 |
10.00 |
NA |
NA |
| M119 |
Male |
NA |
NA |
27.84 |
17.00 |
19.98 |
67.00 |
1.55 |
9.00 |
| M112 |
Male |
NA |
NA |
24.93 |
16.00 |
14.14 |
29.00 |
0.28 |
8.00 |
| F66 |
Female |
0.33 |
5.00 |
9.60 |
97.00 |
33.65 |
79.00 |
1.36 |
16.00 |
| F36 |
Female |
2.94 |
12.00 |
24.99 |
99.00 |
10.30 |
118.00 |
19.14 |
27.00 |
| F252 |
Female |
1.27 |
8.00 |
2.54 |
14.00 |
6.48 |
30.00 |
0.39 |
9.00 |
| F214 |
Female |
NA |
NA |
5.04 |
10.00 |
7.79 |
28.00 |
1.87 |
9.00 |
| F200 |
Female |
NA |
NA |
4.71 |
8.00 |
4.23 |
40.00 |
2.05 |
12.00 |
| F147 |
Female |
5.44 |
14.00 |
25.52 |
57.00 |
18.21 |
70.00 |
7.14 |
18.00 |
| F146 |
Female |
NA |
NA |
9.55 |
22.00 |
5.97 |
17.00 |
0.03 |
7.00 |
| F137 |
Female |
1.71 |
6.00 |
6.54 |
43.00 |
6.95 |
62.00 |
2.19 |
17.00 |
| F135 |
Female |
NA |
N |
3.71 |
25.00 |
5.72 |
48.00 |
0.68 |
5.00 |
| F114 |
Female |
0.99 |
12.00 |
13.66 |
99.00 |
10.72 |
84.00 |
4.56 |
24.00 |
| F104 |
Female |
NA |
NA |
6.07 |
70.00 |
7.59 |
49.00 |
0.53 |
13.00 |
Means Overall 1.89 13.04 10.56 2.99
Male 2.07 18.28 10.35 0.63
Female 2.11 10.18 10.69 3.63
$emmeans
Season = Dry:
Sex emmean SE df lower.CL upper.CL
female 14.05 3.70 32.3 6.50 21.59
male 21.97 3.95 32.7 13.93 30.02
Season = Emergence:
Sex emmean SE df lower.CL upper.CL
female 4.64 3.10 31.5 -1.68 10.97
male 1.34 3.24 32.1 -5.25 7.94
Season = Monsoon:
Sex emmean SE df lower.CL upper.CL
female 22.14 3.01 31.1 16.00 28.28
male 20.34 3.24 31.8 13.74 26.95
Season = Post_Monsoon:
Sex emmean SE df lower.CL upper.CL
female 2.96 4.76 32.0 -6.74 12.66
male 2.80 4.35 33.0 -6.05 11.66
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Season = Dry:
contrast estimate SE df t.ratio p.value
female - male -7.924 4.39 31.6 -1.803 0.0809
Season = Emergence:
contrast estimate SE df t.ratio p.value
female - male 3.302 4.44 31.6 0.744 0.4622
Season = Monsoon:
contrast estimate SE df t.ratio p.value
female - male 1.799 4.02 30.5 0.447 0.6581
Season = Post_Monsoon:
contrast estimate SE df t.ratio p.value
female - male 0.154 4.46 31.9 0.035 0.9726
Graphical Comparisons between sex within the non-subsidized population:

Seasonal Home Range (KDE)
Table | Raw KDE group means of seasonal home ranges between sexes at Stone Canyon (subsidized).
Error in summarySE(season.kde, measurevar = "Home_Range_95kde", groupvars = c("Season", :
could not find function "summarySE"
Error in summarySE(season.kde, measurevar = "Home_Range_95kde", groupvars = c("Season"), :
could not find function "summarySE"
ANOVA Table. Seasonal KDE
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Season 2654.14 884.71 3 39.026 4.5184 0.008181 **
Sex 179.65 179.65 1 25.426 0.9175 0.347144
N 66.05 66.05 1 33.912 0.3373 0.565207
Season:Sex 1743.14 581.05 3 36.391 2.9675 0.044584 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Raw Seasonal KDE Means

Adjusted Seasonal KDE Means

$emmeans
Season = Dry:
Sex emmean SE df lower.CL upper.CL
female 19.99 4.91 41.5 10.09 29.9
male 43.42 6.39 42.1 30.53 56.3
Season = Emergence:
Sex emmean SE df lower.CL upper.CL
female 17.01 7.24 42.4 2.41 31.6
male 17.58 15.47 43.6 -13.61 48.8
Season = Monsoon:
Sex emmean SE df lower.CL upper.CL
female 19.94 5.25 40.8 9.33 30.6
male 31.85 5.73 42.2 20.29 43.4
Season = Post_Monsoon:
Sex emmean SE df lower.CL upper.CL
female 14.97 5.29 41.3 4.29 25.7
male 2.65 9.13 43.3 -15.77 21.1
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Season = Dry:
contrast estimate SE df t.ratio p.value
female - male -23.423 8.47 41.2 -2.765 0.0085
Season = Emergence:
contrast estimate SE df t.ratio p.value
female - male -0.562 16.72 43.7 -0.034 0.9734
Season = Monsoon:
contrast estimate SE df t.ratio p.value
female - male -11.912 8.07 41.2 -1.475 0.1477
Season = Post_Monsoon:
contrast estimate SE df t.ratio p.value
female - male 12.321 10.14 43.9 1.215 0.2308

Home Range Overlap (MCP)
Gila Monster Home Range Overlap of 100% MCPs.
Figure 13 | Interactive map: Home Range overlap by sex of 100% MCPs at Stone Canyon. Red polygons represent female lizards, and blue represents male lizards.
The Stone Canyon population seems to exhibit greater female-female overlap as well as considerable overlap of male-female home ranges. There appears to be limited male-male overlap, with occurance happening in only two male-male home range polygons. This finding is in contrast to the Owl Head buttes study which revealed that there was a large degree of overlap among male-female and male-male overlaps (Table x). Gillardo concluded that, in their study, the high degree of overlap in males-males interactions may be due to having larger home ranges for mate searching activities. Males may have and increased home range size to maximize their access to multiple females. She concluded that the lack of female-female overlap may be due to smaller home range sizes.
At Stone Canyon, males have reduced home range sizes (Table 6; Fig. 4). However, males still retain home range overlap with multiple females while having reduced contact with other males. This may be in response to nutrient subsidies that reduce the need to have expanded home range sizes for foraging activities for both males and females. There may also be a higher density of females as a response to resource availability and reduced range requirements. Males are not forced to expand home ranges for mate searching to the extant that individuals at Owl Head Buttes may be subject to.
Table 8 | Home range overlap of Gila Monsters at the nutrient subsidized site. Male-male overlaps only occured between two pairs of males: M14-M69 and M119-M215 at 0.5 ha. and 19.5 ha. respectively and were therefore not included in the table.
Table: Home range overlap of Stone Canyon Gila Monsters using 100% MCPs.
ID F36 F66 F104 F135 F137 F146 F147 X M14 M67 M69 M112 M119 M215 M255
-------------- ----------- ----- ----- ----- ----- ----- ----- ------------ ------------ ----- ----- ------ ------ ------ -----
Female:Female Male:Female
F36 _ 5.13 _ _ _ 4.65 _ _ _ _ _ 19.44 18.51 _
F66 5.13 _ _ _ _ 5.05 _ _ _ 2.6 _ _ _ _
F104 _ _ _ 0.5 _ _ _ _ _ _ _ _ _
F114 _ _ _ _ _ _ _ _ _ _ 5.82 _ _ _
F135 _ _ 0.5 _ 2.89 _ 3.94 _ _ 2.04 _ _ _ _
F137 _ _ _ 2.89 _ _ 7.91 _ _ 0.55 _ _ _ _
F146 4.65 5.05 _ _ _ _ _ 0.14 _ 0.76 _ _ _ _
F147 _ _ _ 3.94 7.91 _ _ 3.73 0.21 4.6 _ _ _ _
F200 _ _ _ _ _ _ _ _ _ _ 6.49 _ _ _
F252 _ _ _ _ _ _ _ _ _ _ _ _ _ 3.45
Mean = 4.3 ± 0.86 Mean = 5.26 ± 1.78
ID F36 F66 F104 F135 F137 F146 F147 M14 M67 M69 M112 M119 M215 M255
Female:Female Male:Female
Net 6.84 7.25 0.5 4.44 7.91 6.77 8.96 3.87 0.21 8.57 12.31 21.24 20.32 3.45
Prportion 0.2 0.2 0.1 0.5 1 0.7 0.3 0.4 0.02 0.5 0.4 0.6 1 0.2
Home Range Overlap Summary
| Female_Female |
7 |
4.295714 |
2.271694 |
0.8586198 |
2.100967 |
| Male_Female |
13 |
5.256923 |
6.429806 |
1.7833074 |
3.885493 |
| Male_Male |
4 |
9.980000 |
10.958108 |
5.4790541 |
17.436795 |
Home Range Overlap (KDE)
Figure 14 | Interactive map: Home Range overlap by sex of 95% KDEs at Stone Canyon. Red polygons represent female lizards, and blue represents male lizards.



LS0tCnRpdGxlOiAiU3BhdGlhbCBFY29sb2d5IG9mIEdpbGEgTW9uc3RlcnMgaW4gYSBTdWJzaWRpemVkIFJlc291cmNlIEVudmlyb25tZW50IgphdXRob3I6ICJQaWVyc29uLCBNLlQuLCBHaWVuZ2VyLCBDLk0uLCBEZU5hcmRvLCBELkYuLCBQYXJrZXIsIE0uLCBHYWxsYXJkbywgTC4sIEdvb2RlLCBNLiwgR2VudHJ5LCBDLk0uIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICBkZl9wcmludDogcGFnZWQKICByb3dzLnByaW50OiAxMAogIHRoZW1lOiBjb3NtbwogIGhpZ2hsaWdodDogYnJlZXplZGFyawogIG51bWJlcl9zZWN0aW9uczogeWVzCiAgdG9jOiB0cnVlCiAgdG9jX2Zsb2F0OgogICAgY29sbGFwc2VkOiBmYWxzZQogICAgc21vb3RoX3Njcm9sbDogdHJ1ZQpwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKZWRpdG9yX29wdGlvbnM6IApjaHVua19vdXRwdXRfdHlwZTogaW5saW5lCi0tLQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoKaDEudGl0bGUgewogIGZvbnQtc2l6ZTogNDBweDsKICBmb250LWZhbWlseTogIkNhbGlicmkiLCBUaW1lcywgc2VyaWY7CiAgY29sb3I6IERhcmtCbHVlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogIGZvbnQtc2l6ZTogMjBweDsKICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICBjb2xvcjogRGFya0JsdWU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9Cjwvc3R5bGU+Cgo8YnI+CgojIEFCU1RSQUNUIApBbmltYWwgbW92ZW1lbnRzIGFyZSBvZnRlbiBkZWZpbmVkIHVzaW5nIHRoZSBob21lIHJhbmdlIGNvbmNlcHQuIENvbnNlcXVlbnRseSwgaG9tZSByYW5nZXMgYXJlIGRldGVybWluZWQgYnkgdGVtcG9yYWwsIHNwYXRpYWwsIGFuZCBpbmRpdmlkdWFsLWxldmVsIHByb2Nlc3Nlcy4gV2l0aGluIHRoZSBlbnZpcm9ubWVudCwgb25lIG9mIHRoZSBrZXkgZmFjdG9ycyBpbmZsdWVuY2luZyBhbiBhbmltYWzigJlzIHJhbmdlIGFuZCBob3cgaXQgdXNlcyB0aGUgZW52aXJvbm1lbnQgaXMgdGhhdCBvZiByZXNvdXJjZXMuIEFsdGVyYXRpb25zIHRvIHRoZSBlbnZpcm9ubWVudCB0aGF0IGFmZmVjdCByZXNvdXJjZSBkaXN0cmlidXRpb24gYW5kIGF2YWlsYWJpbGl0eSBjYW4gaGF2ZSBwcm9mb3VuZCBjb25zZXF1ZW5jZXMgb24gYW4gYW5pbWFs4oCZcyBzcGF0aWFsIHBhdHRlcm5zLiBPbmUgb2YgdGhlIGJlc3QgZXhhbXBsZXMgb2YgdGhpcyBpcyB0aGF0IG9mIGdvbGYgY291cnNlcy4gQ2VydGFpbiBlbnZpcm9ubWVudGFsIG1vZGlmaWNhdGlvbnMgZXhoaWJpdGVkIGJ5IHNvbWUgaHVtYW4gYWx0ZXJlZCBlbnZpcm9ubWVudHMgY2FuIGhhdmUgcG9zaXRpdmUgZWZmZWN0cyBvbiBjZXJ0YWluIHdpbGRsaWZlIHNwZWNpZXMgYnkgYWx0ZXJpbmcgdGhlaXIgbW92ZW1lbnQgcGF0dGVybnMgYW5kIGZvcmFnaW5nIGVmZm9ydHMuIFdlIGFuYWx5emVkIGRhdGEgY29sbGVjdGVkIGZyb20gMjIgR2lsYSBNb25zdGVycyAqSGVsb2Rlcm1hIHN1c3BlY3R1bSogYXQgYSBzdWJzaWRpemVkIGVudmlyb25tZW50IGluIEFyaXpvbmEgZnJvbSAyMDA3IHRvIDIwMTMgYW5kIDE1IEdpbGEgTW9uc3RlcnMgZnJvbSBhIG5vbi1zdWJzaWRpemVkIGVudmlyb25tZW50IGZyb20gMjAwMCB0byAyMDAyLiBXZSBwZXJmb3JtZWQgYm90aCBrZXJuZWwgZGVuc2l0eSBlc3RpbWF0aW9uIGFuZCBtaW5pbXVtIGNvbnZleCBwb2x5Z29ucyBmb3IgY29tcGFyYWJpbGl0eSBwdXJwb3Nlcy4gQWZ0ZXIgYWRqdXN0aW5nIGFyZWEgZXN0aW1hdGVzIGZvciBzZXgsIG51bWJlciBvZiBmaXhlcywgYW5kIHllYXIsIG1hbGVzIGluIHRoZSBzdWJzaWRpemVkIGVudmlyb25tZW50IGhhZCBhbiBhdmVyYWdlIG92ZXJhbGwgYXJlYSBvZiAxMy42IGhhIHdoaWxlIHRoZSBmZW1hbGVzIGhhZCBhbiBhcmVhIG9mIDguMyBoYS4gSW4gdGhlIHVuc3Vic2lkaXplZCBlbnZpcm9ubWVudCwgbWFsZXMgaGFkIGFuIGF2ZXJhZ2Ugb3ZlcmFsbCBhcmVhIG9mIDQzLjIgaGEgd2hpbGUgZmVtYWxlcyBoYWQgYW4gYXJlYSBvZiAyMy42IGhhLiBHaWxhIE1vbnN0ZXJzIGJldHdlZW4gdGhlIHR3byBlbnZpcm9ubWVudHMgYWxzbyBleGhpYml0ZWQgc2Vhc29uYWwgZGlmZmVyZW5jZXMsIHByaW1hcmlseSBpbiB0aGUgZHJ5IGFuZCBtb25zb29uIHNlYXNvbnMuIFRoZXJlIHdlcmUgYWxzbyBkaWZmZXJlbmNlcyBpbiBob21lIHJhbmdlIG92ZXJsYXAgd2l0aGluIGFuZCBiZXR3ZWVuIHNleGVzLiBJbiB0aGUgc3Vic2lkaXplZCBwb3B1bGF0aW9uLCB0aGVyZSB3YXMgdmVyeSBsaXR0bGUgbWFsZS1tYWxlIG92ZXJsYXAgd2l0aCBvbmx5IHR3byBvY2N1cmFuY2VzLCBtb3JlIGZlbWFsZS1mZW1hbGUgb3ZlcmxhcCBhbmQgbWFsZS1mZW1hbGUgb3ZlcmxhcCB3YXMgaW5jcmVhc2VkLiBNYWxlIGhvbWUgcmFuZ2VzIG9mdGVuIG92ZXJsYXBwZWQgc2V2ZXJhbCBmZW1hbGUgaG9tZSByYW5nZXMuIFRoaXMgc3VnZ2VzdHMgdGhhdCBHaWxhIG1vbnN0ZXIgaG9tZSByYW5nZXMgbWF5IGJlIHNtYWxsZXIgaW4gc3Vic2lkaXplZCByZXNvdXJjZSBlbnZpcm9ubWVudHMgdGhhbiB0aG9zZSBvZiB1bi1zdWJzaWRpemVkIGVudmlyb25tZW50cyBkdWUgdG8gaW5jcmVhc2VzIGluIGF2YWlsYWJsZSByZXNvdXJjZXMuCgo8YnI+CgoKCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQojIExPQUQgUEFDS0FHRVMgCgpsaWJyYXJ5KHRpZHl2ZXJzZSkgCmxpYnJhcnkoa25pdHIpICMgIG1ha2UgdGFibGVzCmxpYnJhcnkobGVhZmxldCkKbGlicmFyeShsbWU0KQpsaWJyYXJ5KGxtZXJUZXN0KQpsaWJyYXJ5KHJlYWRyKQpsaWJyYXJ5KGdncGxvdDIpCiMgbGlicmFyeShkcGx5cikKbGlicmFyeShnZ2ZvcnRpZnkpCmxpYnJhcnkob3JkaW5hbCkKbGlicmFyeShsc21lYW5zKQpsaWJyYXJ5KGVtbWVhbnMpCmxpYnJhcnkobWFwdmlldykKbGlicmFyeShhZGVoYWJpdGF0SFIpCiMgbGlicmFyeShPcGVuU3RyZWV0TWFwKQpsaWJyYXJ5KGdnbWFwKQoja25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAxLzMpICNmb3JjZSBmaWd1cmVzIHRvIGJlIGNlcnRhaW4gc2l6ZSBhbmQgYXNwZWN0IHJhdGlvCmBgYAoKCgojIEdpbGEgTW9uc3RlcnMgKCpIZWxvZGVybWEgc3VzcGVjdHVtKikgYW5kIEh1bWFuIEFsdGVyZWQgRW52aXJvbm1lbnRzCjxwPgogIEFuaW1hbCBtb3ZlbWVudHMgYXJlIG9mdGVuIGRlZmluZWQgdXNpbmcgdGhlIGhvbWUgcmFuZ2UgY29uY2VwdC4gRm9ybWFsbHkgZGVmaW5lZCBieSBXaWxsaWFtIEJ1cmsgaW4gMTk0MyBhcywgInRoYXQgYXJlYSB0cmF2ZXJzZWQgYnkgdGhlIGluZGl2aWR1YWwgaW4gaXRzIG5vcm1hbCBhY3Rpdml0aWVzIG9mIGZvcmFnaW5nLCBtYXRpbmcsIGFuZCBjYXJpbmcgZm9yIHlvdW5nLiBPY2Nhc2lvbmFsIHNhbGxpZXMgb3V0c2lkZSB0aGUgYXJlYSwgcGVyaGFwcyBleHBsb3JhdG9yeSBpbiBuYXR1cmUsIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBob21lIHJhbmdlIi4gQ29uc2VxdWVudGx5LCBob21lIHJhbmdlcyBhcmUgZGV0ZXJtaW5lZCBieSB0ZW1wb3JhbCwgc3BhdGlhbCwgYW5kIGluZGl2aWR1YWwtbGV2ZWwgcHJvY2Vzc2VzLiBTdHVkeWluZyBhbmltYWwgSFLigJlzIGhhcyBiZWVuIG9mIHNwZWNpYWwgaW50ZXJlc3QgdG8gYSB3aWRlIHZhcmlldHkgb2YgcmVzZWFyY2hlcnMsIGluY2x1ZGluZyB0aG9zZSBzdHVkeWluZyByZWxhdGlvbnNoaXBzIGJldHdlZW4gYmVoYXZpb3IsIGFnZSwgc2V4LCBhbmQgc3BhY2luZyBwYXR0ZXJucywgcmVzb3VyY2UgZGlzdHJpYnV0aW9uIGFzIGl0IGFmZmVjdHMgc3BhY2UgdXNlLCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gbWV0YWJvbGljIHJlcXVpcmVtZW50cyBhbmQgaG9tZSByYW5nZSBzaXplLCBhbmQgc3BhY2UgcmVxdWlyZW1lbnRzIGZvciBwdXJwb3NlcyBvZiBjb250cm9sbGluZyBwcm9ibGVtYXRpYyBzcGVjaWVzLCBjb25zZXJ2YXRpb24sIGFuZCB3aWxkbGlmZSBtYW5hZ2VtZW50LiAgCjxwPgogIFdpdGhpbiBhbiBhbmltYWxzIGVudmlyb25tZW50LCBvbmUgb2YgdGhlIGtleSBmYWN0b3JzIGluZmx1ZW5jaW5nIGFuIGFuaW1hbHMgcmFuZ2UgYW5kIGhvdyBpdCB1c2VzIHRoZSBlbnZpcm9ubWVudCBpcyB0aGF0IG9mIHJlc291cmNlcy4gIEFsdGVyYXRpb25zIHRvIHRoZSBlbnZpcm9ubWVudCB0aGF0IGFmZmVjdCByZXNvdXJjZSBkaXN0cmlidXRpb24gYW5kIGF2YWlsYWJpbGl0eSBjYW4gaGF2ZSBwcm9mb3VuZCBjb25zZXF1ZW5jZXMgb24gYW4gYW5pbWFscyBzcGF0aWFsIHBhdHRlcm5zLiBTb21lIG9mIHRoZSBiZXN0IGV4YW1wbGVzIG9mIHRoaXMgYXJlIGFsdGVyYXRpb25zIGNhdXNlZCBieSBodW1hbiBhY3Rpdml0aWVzLiAgSGlzdG9yaWNhbGx5LCBodW1hbiBhbHRlcmF0aW9ucyB0byBlbnZpcm9ubWVudHMgaGF2ZSBiZWVuIHBlcmNpZXZlZCBhcyBoYXZpbmcgbmVnYXRpdmUgY29uc2VxdWVuY2VzIG9uIGxvY2FsIHdpbGRsaWZlIHBvcHVsYXRpb25zLiBIb3dldmVyLCBjZXJ0YWluIGVudmlyb25tZW50YWwgbW9kaWZpY2F0aW9ucyBjYW4gaGF2ZSBwb3NpdGl2ZSBlZmZlY3RzIG9uIHZhcmlvdXMgd2lsZGxpZmUgc3BlY2llcy4gVGhpcyBpcyBzZWVuIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBjZXJ0YWluIGdvbGYgY291cnNlcywgYW5kIGdyZWVuIGFyZWFzLiBPbmUgb2YgdGhlIGtleSBjb25zZXF1ZW5jZXMgb2YgZ29sZiBjb3Vyc2VzLCBlc3BlY2lhbGx5IHRob3NlIHBsYWNlZCBpbiBkZXNlcnQgZW52aXJvbm1lbnRzIGlzIHRoZSB3YXRlciBpcnJpZ2F0aW9uIHN1cHBsZW1lbnRhdGlvbiBhbmQgaG9ydGljdWx0dXJlIHRoYXQgY29tZXMgd2l0aCB0aGVtLiBBcyBhIHJlc3VsdCwgdGhpcyBlbmhhbmNlcyBwcmltYXJ5IHByb2R1Y3Rpdml0eSB3aGljaCBpbmNyZWFzZXMgdGhlIHByZXNlbmNlIG9mIHZlcnRlYnJhdGUgYW5pbWFscyB0aGF0IHRha2UgYWR2YW50YWdlIG9mIHRoYXQgaW5jcmVhc2UgaW4gcHJvZHVjdGl2aXR5LiBJbiByZXB0aWxlcywgZmFzdGVyIGdyb3d0aCBpcyBvZnRlbiBjb3JyZWxhdGVkIHdpdGggaW5jcmVhc2VzIGluIHByZWNpcGl0YXRpb24gYW5kIGF2YWlsYWJsZSByZXNvdXJjZXMuIEEgUmVjZW50IHN0dWR5IGhhcyBzaG93biB0aGF0IEdpbGEgTW9uc3RlcnMgKkhlbG9kZXJtYSBzdXNwZWN0dW0qIGluaGFiaXRpbmcgYSBnb2xmIGNvdXJzZSBpbiB0aGUgdXBsYW5kIFNvbm9yYW4gb2YgQXJpem9uYSBncmV3IGxhcmdlciBhbmQgZmFzdGVyIHRoYW4gdW5zdWJzaWRpemVkIHBvcHVsYXRpb25zLgo8cD4KICBHaWxhIE1vbnN0ZXJzIG9jY3VweSB0aGUgaG90IGRlc2VydCByZWdpb25zIG9mIHRoZSBNb2hhdmUgRGVzZXJ0IGluIHRoZSBleHRyZW1lIHNvdXRoZWFzdGVybiAgTmV2YWRhLCBzb3V0aCB0aHJvdWdoIHRoZSBTb25vcmFuIERlc2VydCBvZiBBcml6b25hIGludG8gU29ub3JhIGFuZCBub3J0aGVybiBTaW5hbG9hLCBNZXhpY28uIEdpbGFzIGFyZSBrbm93biB0byBiZSDigJx3aWRlbHkgZm9yYWdpbmfigJ0gYW5pbWFscyBkdWUgdG8gdGhlaXIgc3BlY2lhbGl6YXRpb24gaW4gZmVlZGluZyBvbiB0aGUgeW91bmcgYW5kIGVnZ3Mgb2Ygc21hbGwgdmVydGVicmF0ZSBuZXN0cy4gVGhlc2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBmaW5kaW5ncyBtYWtlIHRoaXMgc3BlY2llcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzdHVkeWluZyB0aGUgcG90ZW50aWFsIGFsdGVyYXRpb25zIHRvIGFuaW1hbCBob21lIHJhbmdlcyB0aGF0IG51dHJpZW50IHN1YnNpZGl6ZWQgYXJlYXMgc3VjaCBhcyBnb2xmIGNvdXJzZXMgbWF5IGhhdmUgb24gYW5pbWFsIHBvcHVsYXRpb25zLiAKPHA+CgoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KbGlicmFyeShkaXNtbykKbGlicmFyeShyZ2JpZikKbGlicmFyeSh1dGlscykKbGlicmFyeShyZWFkeGwpCmxpYnJhcnkoc3BvdGlmeXIpCmxpYnJhcnkoZ2dyaWRnZXMpCmxpYnJhcnkodmlyaWRpcykKbGlicmFyeShyYXN0ZXJWaXMpCgojIyBVU0lORyBESVNNTzoKIyBleHRlbnQgPC0gZXh0ZW50KC0xMzAsLTcwLDIwLDYwKQoKSC5zdXNwIDwtIGdiaWYoImhlbG9kZXJtYSIsIHNwZWNpZXMgPSAic3VzcGVjdHVtIiwgZXh0ID0gZXh0ZW50LAogICAgICAgICAgICAgZ2VvID0gVFJVRSwgc3AgPSBUUlVFLCBkb3dubG9hZCA9IFRSVUUsCiAgICAgICAgICAgICByZW1vdmVaZXJvcyA9IFRSVUUpCgpILnN1c3BfeHkgPC0gYXMuZGF0YS5mcmFtZShjYmluZChILnN1c3BAY29vcmRzWywxXSxILnN1c3BAY29vcmRzWywyXSkpCmNvbG5hbWVzKEguc3VzcF94eSkgPC0gYygibG9uZ2l0dWRlIiwibGF0aXR1ZGUiKQoKIyB1cyA8LSBtYXBfZGF0YSgic3RhdGUiKQoKIyBnZ3Bsb3QoZGF0YSA9IEguc3VzcF94eSwgYWVzKHg9bG9uZ2l0dWRlLCB5PWxhdGl0dWRlKSkgKwojICAgZ2VvbV9wb2x5Z29uKGRhdGEgPSB1cywgYWVzKHg9bG9uZywgeSA9IGxhdCwgZ3JvdXAgPSBncm91cCksCiMgICAgICAgICAgICAgICAgZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yPSJibGFjayIpICsKIyAgIGdlb21fcG9pbnQoKSArIHhsYWIoIkxvbmdpdHVkZSIpICsgeWxhYigiTGF0aXR1ZGUiKSArCiMgICBjb29yZF9maXhlZCh4bGltID0gYygtMTIwLC0xMDYpLCB5bGltID0gYygzMCw0MSkpCgojIyAgVVNJTkcgUkdCSUY6Ckguc3VzcF9sdSA8LSBuYW1lX2xvb2t1cChxdWVyeSA9ICdoZWxvZGVybWEgc3VzcGVjdHVtJywgcmV0dXJuID0gJ2RhdGEnKQoKSC5zdXNwX2NvZGUgPC0gcHJpbnQoYXMuaW50ZWdlcihuYW1lcyh3aGljaC5tYXgodGFibGUoSC5zdXNwX2x1JG51YktleSkpKSkpCgpvY2NfY291bnQodGF4b25LZXkgPSBILnN1c3BfY29kZSwgZ2VvcmVmZXJlbmNlZCA9IFRSVUUpCgp1c2EgPC0gaXNvY29kZXNbZ3JlcCgiVW5pdGVkIFN0YXRlcyIsIGlzb2NvZGVzJG5hbWUpLCAiY29kZSJdCm1leCA8LSBpc29jb2Rlc1tncmVwKCJNZXhpY28iLCBpc29jb2RlcyRuYW1lKSwgImNvZGUiXQoKSC5zdXNwX2RhdGEgPC0gb2NjX3NlYXJjaCh0YXhvbktleSA9IEguc3VzcF9jb2RlLCAKICAgICAgICAgICAgICAgICAgIHJldHVybiA9ICdkYXRhJywgCiAgICAgICAgICAgICAgICAgICBjb3VudHJ5ID0gdXNhLAogICAgICAgICAgICAgICAgICAgaGFzQ29vcmRpbmF0ZSA9IFRSVUUpCgpILnN1c3BfZGF0YS5tZXggPC0gb2NjX3NlYXJjaCh0YXhvbktleSA9IEguc3VzcF9jb2RlLCAKICAgICAgICAgICAgICAgICAgIHJldHVybiA9ICdkYXRhJywgCiAgICAgICAgICAgICAgICAgICBjb3VudHJ5ID0gbWV4LAogICAgICAgICAgICAgICAgICAgaGFzQ29vcmRpbmF0ZSA9IFRSVUUpCgpILnN1c3BfZGYgPC0gYXMuZGF0YS5mcmFtZShjYmluZChILnN1c3BfZGF0YSRVUyRzY2llbnRpZmljTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEguc3VzcF9kYXRhJFVTJGluc3RpdHV0aW9uQ29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEguc3VzcF9kYXRhJFVTJHN0YXRlUHJvdmluY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBILnN1c3BfZGF0YSRVUyR2ZXJiYXRpbUxvY2FsaXR5KSkKCkguc3VzcF9kZi5tZXggPC0gYXMuZGF0YS5mcmFtZShjYmluZChILnN1c3BfZGF0YS5tZXgkc2NpZW50aWZpY05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBILnN1c3BfZGF0YS5tZXgkaW5zdGl0dXRpb25Db2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC5zdXNwX2RhdGEubWV4JHN0YXRlUHJvdmluY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBILnN1c3BfZGF0YS5tZXgkdmVyYmF0aW1Mb2NhbGl0eSkpCgpILnN1c3BfZGYudXNtZXggPC0gYXMuZGF0YS5mcmFtZShyYmluZChILnN1c3BfZGYsSC5zdXNwX2RmLm1leCkpClZpZXcoSC5zdXNwX2RmLnVzbWV4KQoKY29vcmRzIDwtIGNiaW5kKHR5cGUuY29udmVydChILnN1c3BfZGF0YVtbIlVTIl1dW1siZGVjaW1hbExvbmdpdHVkZSJdXSwgYXMuaXMgPSBUUlVFKSwKICAgICAgICAgICAgICAgIHR5cGUuY29udmVydChILnN1c3BfZGF0YVtbIlVTIl1dW1siZGVjaW1hbExhdGl0dWRlIl1dLCBhcy5pcyA9IFRSVUUpKQoKY29vcmRzLm1leCA8LSBjYmluZCh0eXBlLmNvbnZlcnQoSC5zdXNwX2RhdGEubWV4W1siZGVjaW1hbExvbmdpdHVkZSJdXSwgYXMuaXMgPSBUUlVFKSwKICAgICAgICAgICAgICAgIHR5cGUuY29udmVydChILnN1c3BfZGF0YS5tZXhbWyJkZWNpbWFsTGF0aXR1ZGUiXV0sIGFzLmlzID0gVFJVRSkpCgpjb29yZHMgPC0gIHJiaW5kKGNvb3Jkcyxjb29yZHMubWV4KQpWaWV3KGNvb3JkcykKCkguc3VzcF9pbmZvIDwtIGNiaW5kKEguc3VzcF9kZi51c21leCxjb29yZHMpClZpZXcoSC5zdXNwX2luZm8pCmNvbG5hbWVzKEguc3VzcF9pbmZvKSA8LSBjKCJzcGVjaWVzIiwiZGF0YXNldCIsInN0YXRlIiwibG9jYXRpb24iLCJsb25naXR1ZGUiLCJsYXRpdHVkZSIpCgp3b3JsZCA8LSBtYXBfZGF0YSgid29ybGQiKQpzdGF0ZXMgPC0gbWFwX2RhdGEoInN0YXRlIikKY291bnRpZXMgPC0gbWFwX2RhdGEoImNvdW50eSIpCgpjb3VudGllcyRwb2x5bmFtZSA8LSBwYXN0ZShjb3VudGllcyRyZWdpb24sIGNvdW50aWVzJHN1YnJlZ2lvbiwgc2VwID0gIiwiKQpjb3VudGllcyA8LSBjb3VudGllcyAlPiUgbGVmdF9qb2luKGZpcHMsIGJ5ID0gYygicG9seW5hbWUiID0gInBvbHluYW1lIikpCmNvdW50aWVzJGZpcHMgPC0gYXMuY2hhcmFjdGVyKGNvdW50aWVzJGZpcHMpCgpzb3V0aHdlc3Rlcm5fc3RhdGVzIDwtIHN1YnNldChzdGF0ZXMsIHJlZ2lvbiAlaW4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiYXJpem9uYSIsICJjYWxpZm9ybmlhIiwgInV0YWgiLCAibmV2YWRhIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZXcgbWV4aWNvIiwgImNvbG9yYWRvIiwidGV4YXMiLCJva2xhaG9tYSIsImthbnNhcyIpKQoKc291dGh3ZXN0ZXJuX2NvdW50aWVzIDwtIHN1YnNldChjb3VudGllcywgcmVnaW9uICVpbiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoImFyaXpvbmEiLCAiY2FsaWZvcm5pYSIsICJ1dGFoIiwgIm5ldmFkYSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZXcgbWV4aWNvIiwgImNvbG9yYWRvIiwidGV4YXMiLCJva2xhaG9tYSIsImthbnNhcyIpKQoKbGlicmFyeShyYXN0ZXIpCnByb3ZpbmNlcyA8LSBjKCJTb25vcmEiLCJTaW5hbG9hIikKCm1leGljbyA8LSBnZXREYXRhKCJHQURNIixjb3VudHJ5PSJNRVgiLGxldmVsPTEpCgptZXgucHJvdmluY2VzIDwtIG1leGljb1ttZXhpY28kTkFNRV8xICVpbiUgcHJvdmluY2VzLF0KCmdncGxvdChkYXRhID0gSC5zdXNwX2luZm8sIGFlcyh4PWxvbmdpdHVkZSwgeT1sYXRpdHVkZSkpICsgCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSB3b3JsZCwgYWVzKHg9bG9uZyx5PWxhdCwgZ3JvdXA9Z3JvdXApLCBmaWxsID0gImdyYXkiLCBjb2xvciA9IndoaXRlIikrCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSBzdGF0ZXMsIGFlcyh4PWxvbmcseT1sYXQsIGdyb3VwPWdyb3VwKSwgZmlsbCA9ICJncmF5IiwgY29sb3IgPSAid2hpdGUiKSsKICAjIGdlb21fcG9seWdvbihkYXRhID0gZmxfcG9seSwgYWVzKHg9bG9uZywgeT1sYXQsIGdyb3VwPWdyb3VwLCBmaWxsID0gZmlsbCkpICAKICBnZW9tX3BvbHlnb24oZGF0YSA9IHNvdXRod2VzdGVybl9zdGF0ZXMsIGFlcyh4PWxvbmcseT1sYXQsIGdyb3VwPWdyb3VwKSwgZmlsbCA9IE5BLAogICAgICAgICAgICAgICBjb2xvcj0id2hpdGUiKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSBzb3V0aHdlc3Rlcm5fY291bnRpZXMsIGFlcyh4PWxvbmcseT1sYXQsIGdyb3VwPWdyb3VwKSwgZmlsbCA9IE5BLCAKICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC4wNSkgKwogIGdlb21fcG9seWdvbihkYXRhPW1leC5wcm92aW5jZXMsIGFlcyh4PWxvbmcseT1sYXQsIGdyb3VwPWdyb3VwKSwgZmlsbCA9ICJncmF5IiwgCiAgICAgICAgICAgICAgIGNvbG9yID0id2hpdGUiKSArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBzdGF0ZSksIHNpemU9MSkgKwogIGNvb3JkX21hcCgiY29uaWMiLCBsYXQwID0gMzAsIHhsaW09YygtMTE5LC05OCksIHlsaW09YygyMywzOCkpICsKICBzY2FsZV9maWxsX2lkZW50aXR5KCkgKwogIHRoZW1lX2dyZXkoKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0icmlnaHQiKSArIHRoZW1lKGxlZ2VuZC50aXRsZS5hbGlnbj0wLjUpICsKICB0aGVtZShwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAnZGVlcHNreWJsdWUnKSwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG91ciA9IE5BKSkgKwogIGxhYnMoeCA9ICJMb25naXR1ZGUiLCB5ID0gIkxhdGl0dWRlIiwgCiAgICAgICB0aXRsZSA9ICJHaWxhIE1vbnN0ZXIgRGlzdHJpYnV0aW9uIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgaGp1c3QgPSAwLjUpKQpgYGAKCjxicj4KCgoKIyBTdHVkeSBTaXRlCgogIEZvciB0aGUgc3Vic2lkaXplZCByZXNvdXJjZSBwb3B1bGF0aW9uIG9jY3VweWluZyBhIGh1bWFuIGFsdGVyZWQgZW52aXJvbm1lbnQsIHNwYXRpYWwgZGF0YSB3YXMgY29sbGVjdGVkIG9uIDIyIEdpbGEgTW9uc3RlcnMsIDEzIGZlbWFsZXMgYW5kIDkgbWFsZXMgYXQgU3RvbmUgQ2FueW9uIEdvbGYgQ2x1YiwgbG9jYXRlZCBpbiBQaW1hIENvdW50eSwgQXJpem9uYSBhdCB0aGUgYmFzZSBvZiB0aGUgVG9ydG9saXRhIE1vdW50YWlucy4gU3RvbmUgQ2FueW9uIGlzIGEgZ29sZiBjbHViIHdpdGggYW4gYXJlYSBvZiBhcHByb3hpbWF0ZWx5IDM0NSBoZWN0YXJlcywgY29uc2lzdGluZyBvZiB2ZWdldGF0aW9uIHRoYXQgaXMgdHlwaWNhbCBvZiBTb25vcmFuIGRlc2VydHNjcnViIGhhYml0YXQgb2YgdGhlIEFyaXpvbmEgdXBsYW5kcy4gRWxldmF0aW9uIHJhbmdlcyBmcm9tIDkwMG0tMTAwMG0sIHdpdGggdGhlIGxhbmRzY2FwZSBjb25zaXN0aW5nIG9mIGdyYW5pdGUgb3V0Y3JvcCBoaWxscyB3aXRoIGxhcmdlIGJvdWxkZXJzIHRocm91Z2hvdXQsIGludGVycnVwdGVkIGJ5IHdhdGVyZWQgZmFpcndheXMsIHBvbmRzIGFuZCBwYXZlZCBjYXJ0IHBhdGhzLiBUaGlzIGdvbGYgY291cnNlIHBvc3Nlc3NlcyBhIHBhcnRpYWxseSB1cmJhbml6ZWQgaG91c2luZyBkZXZlbG9wbWVudCB3aXRoIHByb3BlcnRpZXMgZW5jb21wYXNzaW5nIHRoZSBwZXJpbWV0ZXIgb2YgdGhlIGNvdXJzZS4gCgogIDxicj4KCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRSwgY2FjaGU9VFJVRX0KIyBnZ21hcDo6cmVnaXN0ZXJfZ29vZ2xlKGtleSA9ICJBSXphU3lCamhoRTlwZVJCbVMxaDlXWVF4MWs1TUZfWEFYcVVmU3MiKQojIAojIHAzPC0gZ2dtYXAoZ2V0X2dvb2dsZW1hcChjZW50ZXIgPSBjKGxvbiA9IC0xMTAuOTkwODgsIGxhdCA9IDMyLjQ2ODc4KSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbSA9IDE1LCBzY2FsZSA9IDIsbWFwdHlwZSA9J3NhdGVsbGl0ZScsYXJjaGl2aW5nID0gVFJVRSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAnY29sb3InKSkKIyAKIyBwMwoKTG9uZ2l0dWRlPC1jKC0xMTAuOTc4LC0xMTAuOTc4LC0xMTAuOTgwLC0xMTAuOTgzLC0xMTAuOTg1LC0xMTAuOTg4LC0xMTAuOTkwLC0xMTAuOTk0LC0xMTAuOTk1LAogICAgICAgICAgICAgLTExMC45OTcsLTExMS4wMDMsLTExMS4wMDQsLTExMS4wMDQyLC0xMTEuMDAwLC0xMTAuOTk1LC0xMTAuOTg1LC0xMTAuOTc4LC0xMTAuOTgpCgpMYXRpdHVkZTwtYygzMi40NjMsMzIuNDYyLDMyLjQ2MiwzMi40NjEsMzIuNDYxLDMyLjQ2MCwzMi40NjIsMzIuNDY0LDMyLjQ2NiwzMi40NjgsMzIuNDY4LAogICAgICAgICAgICAzMi40NjksMzIuNDczLDMyLjQ3MzMsMzIuNDcyLDMyLjQ3NCwzMi40NzEsMzIuNDY3KQoKbXljb29yZGRhdGEgPC0gYXMuZGF0YS5mcmFtZShjYmluZChMb25naXR1ZGUsTGF0aXR1ZGUpKQoKcDMrZ2VvbV9wb2x5Z29uKGRhdGE9bXljb29yZGRhdGEsYWVzKHg9TG9uZ2l0dWRlLHk9TGF0aXR1ZGUpLGFscGhhPTAuMixjb2xvdXI9InJlZCIsCiAgICAgICAgICAgICAgICBmaWxsPSJyZWQiKSsKICAjIGdlb21fcGF0aChkYXRhPW15Y29vcmRkYXRhLGFlcyh4PUxvbmdpdHVkZSx5PUxhdGl0dWRlKSwKICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91cj0id2hpdGUiLGFscGhhPTAuNCxzaXplPTIpKwogIGFubm90YXRlKCJ0ZXh0IiwgeD0tMTEwLjk4OSx5PTMyLjQ2OCxsYWJlbD0iU3RvbmUgQ2FueW9uIENsdWIiLGNvbG91cj0id2hpdGUiLHNpemU9MykrCiAgIyBzY2FsZWJhcih4Lm1pbiA9IC0xMTEuMDA1LCB4Lm1heCA9IC0xMTAuOTc1LAogICMgICAgICAgICB5Lm1pbiA9IDMyLjQ1NSwgeS5tYXggPSAzMi40ODAsIGFuY2hvciA9IE5VTEwsCiAgIyAgICAgICAgICBkaXN0ID0gNTAsIHRyYW5zZm9ybT1UUlVFLGRpc3RfdW5pdD0ibSIsIG1vZGVsID0gJ1dHUzg0JykrCiAgbGFicyh0aXRsZSA9ICJTdG9uZSBDYW55b24gU3R1ZHkgU2l0ZSBPcm8gVmFsbGV5IEFyaXpvbmEiKQpgYGAKRmlndXJlIDEgfCBTdG9uZSBDYW55b24gR29sZiBDbHViLCBsb2NhdGVkIGluIE9ybyBWYWxsZXksIEFyaXpvbmEgb24gdGhlIG5vcnRoZXJuIGVkZ2Ugb2YgVHVjc29uLCBBcml6b25hLgoKPGJyPgoKRm9yIHRoZSBjb21wYXJpc29uIHNpdGUsIHRoZSB1bnN1YnNpZGl6ZWQgbmF0dXJhbCBwb3B1bGF0aW9uIHdhcyByZXByZXNlbnRlZCB1c2luZyBzcGF0aWFsIGRhdGEgdGhhdCB3YXMgY29sbGVjdGVkIG9uIDE1IEdpbGEgTW9uc3RlcnMsIDYgbWFsZXMsIDYgZmVtYWxlcyBhbmQgMyBzdWItYWR1bHRzIGZyb20gMjAwMC0yMDAyIHVzaW5nIHJhZGlvLXRlbGVtZXRyeSBhdCBPd2wgSGVhZCBCdXR0ZXMsIEFyaXpvbmEuIExvY2F0ZWQgaW4gQXJpem9uYSB1cGxhbmQgU29ub3JhbiBEZXNlcnQgYXBwcm94aW1hdGVseSAxOSBrbSBub3J0aCBub3J0aGVhc3Qgb2YgU3RvbmUgQ2FueW9uLCB0aGUgT3dsIEhlYWQgQnV0dGVzIHN0dWR5IHNpdGUgd2FzIGFuIGFyZWEgb2YgYXBwcm94aW1hdGVseSAyMDAgaGVjdGFyZXMsIHdpdGggYW4gZWxldmF0aW9uIHJhbmdlIG9mIDgwMG0tOTAwbSwgYW5kIGRpc2NvbnRpbnVvdXMgc291dGhlcm4gYnV0dGVzIG9mIHJvY2t5IG91dGNyb3BzLiBPd2wgSGVhZCBoYXJib3JzIG5vIHVyYmFuaXplZCBkZXZlbG9wbWVudCBvciBvdGhlciBodW1hbiBhbHRlcmVkIGVudmlyb25tZW50cyBhc2lkZSBmcm9tIGhpZ2hseSBzcGFjZWQgdW5wYXZlZCBkaXJ0IGFjY2VzcyByb2FkcyB0aHJvdWdob3V0IHRoZSBzdXJyb3VuZGluZyBhcmVhLiAKCjxicj4KCmBgYHtyfQpBbGwuR2lsYXMgPC0gcmVhZF9jc3YoIi4vR01fRmluYWxfRGF0YS5jc3YiKQoKdXRtX3BvaW50cyA8LSBjYmluZChBbGwuR2lsYXMkRUFTVElORywgQWxsLkdpbGFzJE5PUlRISU5HKQoKdXRtX2xvY2F0aW9ucyA8LSBTcGF0aWFsUG9pbnRzKHV0bV9wb2ludHMsIHByb2o0c3RyaW5nPUNSUy5TQykKCnByb2pfbGF0LmxvbiA8LSBhcy5kYXRhLmZyYW1lKHNwVHJhbnNmb3JtKHV0bV9sb2NhdGlvbnMsIENSUygiK3Byb2o9bG9uZ2xhdCArZGF0dW09V0dTODQiKSkpCmNvbG5hbWVzKHByb2pfbGF0LmxvbikgPC0gYygieCIsInkiKQoKIyMgRk9SVElHWSBTUEFUSUFMIFNQQVRJQUwgUE9JTlRTIEZPUiBQTE9UVElORzoKcHJval9sYXQubG9uIDwtIGZvcnRpZnkocHJval9sYXQubG9uLCByZWdpb24gPSAiVHlwZSIpCgpteU1hcCA8LSBnZXRfc3RhbWVubWFwKGJib3ggPSBjKGxlZnQgPSAtMTExLjAwOSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b20gPSAzMi40NTksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSAtMTEwLjk2OSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgPSAzMi40NzQpLAogICAgICAgICAgICAgICAgICAgICAgIG1hcHR5cGUgPSAidGVycmFpbiIsIAogICAgICAgICAgICAgICAgICAgICAgIGNyb3AgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgICB6b29tID0gMTUpCgpnZ21hcChteU1hcCkrZ2VvbV9wb2ludChkYXRhPXByb2pfbGF0LmxvbiwgYWVzKHg9eCwgeT15KSwgc2l6ZT0wLjMpCmBgYAoKCgoKCmBgYHtyIGV2YWw9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpiaW9jbGltIDwtIGdldERhdGEobmFtZSA9ICJ3b3JsZGNsaW0iLCByZXMgPSAyLjUsIHZhciA9ICJiaW8iLCBwYXRoID0gIi4vRGF0YS8iKQoKbmFtZXMoYmlvY2xpbSkgPC0gYygiQW5uIE1lYW4gVGVtcCIsIk1lYW4gRGl1cm5hbCBSYW5nZSIsIklzb3RoZXJtYWxpdHkiLAogICAgICAgICAgICAgICAgICAgICJUZW1wZXJhdHVyZSBTZWFzb25hbGl0eSIsIk1heCBUZW1wIFdhcm1lc3QgTW8iLCJNaW4gVGVtcCBDb2xkZXN0IE1vIiwKICAgICAgICAgICAgICAgICAgICAiQW5uIFRlbXAgUmFuZ2UiLCJNZWFuIFRlbXAgV2V0dGVzdCBRdHIiLCJNZWFuIFRlbXAgRHJpZXN0IFF0ciIsCiAgICAgICAgICAgICAgICAgICAgIk1lYW4gVGVtcCBXYXJtZXN0IFF0ciIsIk1lYW4gVGVtcCBDb2xkZXN0IFF0ciIsIkFubnVhbCBQcmVjaXAiLAogICAgICAgICAgICAgICAgICAgICJQcmVjaXAgV2V0dGVzdCBNbyIsIlByZWNpcCBEcmllc3QgTW8iLCJQcmVjaXAgU2Vhc29uYWxpdHkiLAogICAgICAgICAgICAgICAgICAgICJQcmVjaXAgV2V0dGVzdCBRdHIiLCJQcmVjaXAgRHJpZXN0IFF0ciIsIlByZWNpcCBXYXJtZXN0IFF0ciIsCiAgICAgICAgICAgICAgICAgICAgIlByZWNpcCBDb2xkZXN0IFF0ciIpCgojIGJpb19leHRlbnQgPC0gZXh0ZW50KHggPSBjKAojICAgbWluKEguc3VzcF94eSRsb25naXR1ZGUpLAojICAgbWF4KEguc3VzcF94eSRsb25naXR1ZGUpLAojICAgbWluKEguc3VzcF94eSRsYXRpdHVkZSksCiMgICBtYXgoSC5zdXNwX3h5JGxhdGl0dWRlKSkpCgpiaW9fZXh0ZW50IDwtIGV4dGVudCh4ID0gYygKICBtaW4oLTExOCksCiAgbWF4KC0xMDUpLAogIG1pbigzMCksCiAgbWF4KDQwKSkpCgoKYmlvY2xpbV9leHRlbnQgPC0gY3JvcCh4ID0gYmlvY2xpbSwgeSA9IGJpb19leHRlbnQpCmJpb2NsaW1fbW9kZWwgPC0gYmlvY2xpbSh4ID0gYmlvY2xpbV9leHRlbnQsIHAgPSBILnN1c3BfeHkpCnByZXNlbmNlX21vZGVsIDwtIGRpc21vOjpwcmVkaWN0KG9iamVjdCA9IGJpb2NsaW1fbW9kZWwsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gYmlvY2xpbV9leHRlbnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQgPSBiaW9fZXh0ZW50KQoKIyBILnN1c3BfaW5mbwpncGxvdChwcmVzZW5jZV9tb2RlbCkgKyAKICBnZW9tX3Jhc3RlcihhZXMoZmlsbD12YWx1ZSkpICsKICBnZW9tX3BvbHlnb24oZGF0YSA9IHVzLCBhZXMoeD0gbG9uZywgeSA9IGxhdCwgZ3JvdXAgPSBncm91cCksCiAgICAgICAgICAgICAgIGZpbGwgPSBOQSwgY29sb3I9ImJsYWNrIikgKwogIGdlb21fcG9pbnQoZGF0YSA9IEguc3VzcF9pbmZvLCBhZXMoeCA9IGxvbmdpdHVkZSwgeSA9IGxhdGl0dWRlKSwgY29sb3IgPSAiYmxhY2siLCAKICAgICAgICAgICAgIGFscGhhID0gMC41KSArCiAgc2NhbGVfZmlsbF9ncmFkaWVudG4oY29sb3Vycz1jKCJicm93biIsInllbGxvdyIsImRhcmtncmVlbiIpLCAiUHJvYmFiaWxpdHkiKSArCiAgY29vcmRfZml4ZWQoeGxpbSA9IGMoLTExNywtMTA2KSwgeWxpbSA9IGMoMzEsMzkpKSArCiAgeGxhYigiTG9uZ2l0dWRlIikgKyB5bGFiKCJMYXRpdHVkZSIpICsgZ2d0aXRsZSgiUHJvYmFiaWxpdHkgb2YgR2lsYSBNb25zdGVyIE9jY3VycmVuY2UiKSArIAogIHRoZW1lX2J3KCkgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkgKyAKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKSsKICB0aGVtZShwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpKQpgYGAKCgoKCgoKIyBPdmVyYWxsIFllYXJseSBIb21lIFJhbmdlcyAoTUNQKQoKPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPlN1bW1hcnkgb2YgaG9tZSByYW5nZSBzaXplLjwvc3Bhbj4KCmBgYHtyIEhvbWUgcmFuZ2Ugc2l6ZXMgb2YgU3RvbmUgQ2FueW9uIGFuZCBPd2wgSGVhZCBCdXR0ZXMgYnkgeWVhci4sIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CkdNX3RhYmxlIDwtIHJlYWRfY3N2KCJHTV90YWJsZS5jc3YiKQprYWJsZShHTV90YWJsZSxmb3JtYXQ9InBhbmRvYyIsIGNhcHRpb249J1RhYmxlIDEgfCBQb29sZWQgb3ZlcmFsbCBob21lIHJhbmdlcyBvZiBHaWxhIE1vbnN0ZXJzIGF0IE93bCBIZWFkIEJ1dHRlcyBhbmQgU3RvbmUgQ2FueW9uIEdvbGYgQ2x1Yi4gQm90aCAxMDAlIGFuZCA5NSUgTUNQcyB3ZXJlIGNhbGN1bGF0ZWQgYmV0d2VlbiBib3RoIHBvcHVsYXRpb25zLicpCmBgYAoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KFJtaXNjKQpNZWFucyA8LSBzdW1tYXJ5U0UoeWVhciwgbWVhc3VyZXZhcj0iSG9tZV9SYW5nZV8xMDBtY3AiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwdmFycz1jKCJFbnZpcm9ubWVudCIpLG5hLnJtID0gVFJVRSkKCmthYmxlKE1lYW5zLCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdPdmVyYWxsIGNvbWJpbmVkIDEwMCUgTUNQIG1lYW5zIGF2ZXJhZ2VkIGFjcm9zcyBzZXgnKQpgYGAKCgoKCgo8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+R2lsYSBNb25zdGVyIEhvbWUgUmFuZ2UgU2l6ZXMgYXQgU3RvbmUgQ2FueW9uIHZzLiBPd2wgSGVhZCBCdXR0ZXMuPC9zcGFuPgoKCmBgYHtyIFN0b25lIENhbnlvbiBWcy4gT3dsIEhlYWQgQnV0dGVzLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp5ZWFyIDwtIHJlYWRfY3N2KCJHTV9Db25zb2xpZGF0ZWRfQnlZZWFyLmNzdiIpCgojIHF1aWNrIHBsb3QKR3JhcGgxPC1nZ3Bsb3QoeWVhcixhZXMoeD1OMTAwLHk9SG9tZV9SYW5nZV8xMDBtY3AsZ3JvdXA9RW52aXJvbm1lbnQpKSsKICBnZW9tX3BvaW50KGFlcyhzaGFwZSA9IGZhY3RvcihFbnZpcm9ubWVudCkpLCBzaXplID0gMikrCiAgZ2VvbV9zbW9vdGgobWV0aG9kPWxtKSsKICAjIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzPWMoc3Vic2lkaXplZD0iY3lhbjMiLG5vbnN1YnNpZGl6ZWQ9ImluZGlhbiByZWQxIikpKwogICMgbGFicyh0aXRsZSA9ICIxMDAlIE1DUCBIb21lIFJhbmdlcyIpKwogIHhsYWIoIk51bWJlciBvZiBSZWxvY2F0aW9ucyIpKwogIHlsYWIoIkFyZWEgKGhhKSB1c2luZyAxMDAlIE1DUCIpKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsc2U9RkFMU0UpKwogIGxhYnMoY2FwdGlvbiA9ICJGaWd1cmUgMiB8IE5vbi1TdWJzaWRpemVkIChPd2wgSGVhZCBCdXR0ZXMpIHZzLiBTdWJzaWRpemVkIChTdG9uZSBDYW55b24pIHBvcHVsYXRpb24gMTAwJSBNQ1BzIGFnYWluc3QgbnVtYmVyIFxuIG9mIGZpeGVzIG9mIHRoZSBjb21wbGV0ZSBkYXRhIHNldC4iKSsKICB0aGVtZShwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLGxpbmVoZWlnaHQgPSAwLjkpKQogICMgdGhlbWVfYncoKQoKR3JhcGgxPC1HcmFwaDErdGhlbWUoYXhpcy50aXRsZT1lbGVtZW50X3RleHQoc2l6ZSA9IDE0KSkKCiMgbGVnZW5kIGF0IHRvcC1sZWZ0LCBpbnNpZGUgdGhlIHBsb3QKU0NPSC5oci5maWc8LUdyYXBoMSArIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgbGVnZW5kLmp1c3RpZmljYXRpb249YygwLDEpLAogICAgICAgICAgICAgICBsZWdlbmQucG9zaXRpb249YygwLjA1LCAwLjk1KSwKICAgICAgICAgICAgICAgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgIGxlZ2VuZC5rZXkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siKSkKU0NPSC5oci5maWcKIyBkaXIuY3JlYXRlKCJvdXRwdXRzIikgIyBjcmVhdGUgYSBuZXcgZm9sZGVyIHRvIGhvbGQgdGhlIG91dHB1dCBmaWxlcwojIGdnc2F2ZSgib3V0cHV0cy9TQ19PSEJfcGxvdC5wZGYiKQpgYGAKCjxicj4KCgpgYGB7ciBldmFsPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KIyBtY3BfYW5hbHlzaXMgPC0gZnVuY3Rpb24oZmlsZW5hbWUsIHBlcmNlbnRhZ2UpewojICAgZGF0YSA8LSByZWFkLmNzdihmaWxlID0gZmlsZW5hbWUpCiMgICB4IDwtIGFzLmRhdGEuZnJhbWUoZGF0YSRFQVNUSU5HKQojICAgeSA8LSBhcy5kYXRhLmZyYW1lKGRhdGEkTk9SVEhJTkcpCiMgICB4eSA8LSBjKHgseSkKIyAgIGRhdGEucHJvaiA8LSBTcGF0aWFsUG9pbnRzRGF0YUZyYW1lKHh5LGRhdGEsIHByb2o0c3RyaW5nID0gQ1JTLlNDKQojICAgeHkgPC0gU3BhdGlhbFBvaW50cyhkYXRhLnByb2pAY29vcmRzKQojICAgbWNwLm91dCA8LSBtY3AoeHksIHBlcmNlbnRhZ2UsIHVub3V0PSJoYSIpCiMgICBhcmVhIDwtIGFzLmRhdGEuZnJhbWUocm91bmQobWNwLm91dEBkYXRhJGFyZWEsNCkpCiMgICAucm93TmFtZXNERihhcmVhLCBtYWtlLm5hbWVzPVRSVUUpIDwtIGRhdGEkWUVBUgojICAgd3JpdGUudGFibGUoYXJlYSxmaWxlPSJNQ1BfSGVjdGFyZXMuY3N2IiwKIyAgICAgICAgICAgICAgIGFwcGVuZD1UUlVFLHNlcD0iLCIsIGNvbC5uYW1lcz1GQUxTRSwgcm93Lm5hbWVzPVRSVUUpCiMgICBtY3AucG9pbnRzIDwtIGNiaW5kKChkYXRhLmZyYW1lKHh5KSksZGF0YSRZRUFSKQojICAgY29sbmFtZXMobWNwLnBvaW50cykgPC0gYygieCIsInkiLCAieWVhciIpCiMgICBtY3AucG9seSA8LSBmb3J0aWZ5KG1jcC5vdXQsIHJlZ2lvbiA9ICJpZCIpCiMgICB1bml0cyA8LSBncmlkLnRleHQocGFzdGUocm91bmQobWNwLm91dEBkYXRhJGFyZWEsMiksIiBoYSIpLCB4PTAuOSwgIHk9MC45NSwKIyAgICAgICAgICAgICAgICAgICAgICBncD1ncGFyKGZvbnRmYWNlPTQsIGNleD0wLjkpLCBkcmF3ID0gRkFMU0UpCiMgICBtY3AucGxvdCA8LSBnZ3Bsb3QoKSArCiMgICAgIGdlb21fcG9seWdvbihkYXRhPW1jcC5wb2x5LCBhZXMoeD1tY3AucG9seSRsb25nLCB5PW1jcC5wb2x5JGxhdCksIGFscGhhPTAuNSkgKwojICAgICBnZW9tX3BvaW50KGRhdGE9bWNwLnBvaW50cywgYWVzKHg9eCwgeT15KSkgKyB0aGVtZV9idygpICsKIyAgICAgbGFicyh4PSJFYXN0aW5nIChtKSIsIHk9Ik5vcnRoaW5nIChtKSIsIHRpdGxlPW1jcC5wb2ludHMkeWVhcikgKwojICAgICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiLCBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGhqdXN0ID0gMC41KSkgKwojICAgICBhbm5vdGF0aW9uX2N1c3RvbSh1bml0cykKIyAgIG1jcC5wbG90CiMgfQoKYGBgCgoKCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmxpYnJhcnkoUm1pc2MpCllSX0dSUF9NZWFucyA8LSBzdW1tYXJ5U0UoeWVhciwgbWVhc3VyZXZhcj0iSG9tZV9SYW5nZV8xMDBtY3AiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwdmFycz1jKCJFbnZpcm9ubWVudCIsIlNleCIpLG5hLnJtID0gVFJVRSkKCmthYmxlKFlSX0dSUF9NZWFucywgZm9ybWF0ID0gInBhbmRvYyIsIAogICAgICBjYXB0aW9uID0gJ1RhYmxlIDIgfCBSYXcgZ3JvdXAgMTAwJSBNQ1AgaG9tZSByYW5nZSBtZWFucyBvZiBTdG9uZSBDYW55b24gYW5kIE93bCBIZWFkIEJ1dHRlcy4gR3JvdXBlZCBieSBlbnZpcm9ubWVudCBhbmQgc2V4LicpCmBgYAoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CllSX0dSUF9NZWFuczk1IDwtIHN1bW1hcnlTRSh5ZWFyLCBtZWFzdXJldmFyPSJIb21lX1JhbmdlXzk1bWNwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwdmFycz1jKCJFbnZpcm9ubWVudCIsIlNleCIpLG5hLnJtID0gVFJVRSkKCmthYmxlKFlSX0dSUF9NZWFuczk1LCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdUYWJsZSAzIHwgUmF3IGdyb3VwIDk1JSBNQ1AgaG9tZSByYW5nZSBtZWFucyBvZiByYXcgZGF0YSBvZiBTdG9uZSBDYW55b24gYW5kIE93bCBIZWFkIEJ1dHRlcy4gR3JvdXBlZCBieSBlbnZpcm9ubWVudCBhbmQgc2V4LicpCmBgYAoKCgoKCgo8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+R2lsYSBNb25zdGVyIFllYXJseSBIb21lIFJhbmdlIFNoaWZ0cyBvZiAxMDAlIE1DUHMuPC9zcGFuPgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KQ1JTLlNDPC1DUlMoIitwcm9qPXV0bSArem9uZT0xMiArZWxscHM9V0dTODQgK3VuaXRzPW0gK25vX2RlZnMiKQoKbWNwX2FuYWx5c2lzLlBPTFkgPC0gZnVuY3Rpb24oZmlsZW5hbWUsIHBlcmNlbnRhZ2UpewogIGRhdGEgPC0gcmVhZC5jc3YoZmlsZSA9IGZpbGVuYW1lLHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkKICBkYXRhLnNwIDwtIGRhdGFbLCBjKCJMSVpBUkROVU1CRVIiLCAiRUFTVElORyIsICJOT1JUSElORyIpXQogIGNvb3JkaW5hdGVzKGRhdGEuc3ApIDwtIGMoIkVBU1RJTkciLCAiTk9SVEhJTkciKQogIHByb2o0c3RyaW5nKGRhdGEuc3ApIDwtIENSUy5TQwogIG1jcF9vdXQgPC0gbWNwKGRhdGEuc3AsIHBlcmNlbnRhZ2UsIHVub3V0PSJoYSIpCn0KCk0yMTVfbWNwLjExPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMjE1LzIwMTEgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTIxNV9tY3AuMTI8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00yMTUvMjAxMiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTA0X21jcC4wODwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEwNC8yMDA4IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMDRfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTA0LzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuMDg8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvMjAwOCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMTRfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0LzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuMTE8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvMjAxMSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC4xMjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC8yMDEyIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMzdfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTM3LzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjEzN19tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMzcvMjAxMCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTM3X21jcC4xMTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEzNy8yMDExIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3LzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvMjAxMCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTQ3X21jcC4xMTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny8yMDExIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLjEyPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3LzIwMTIgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjM2X21jcC4wODwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjM2LzIwMDggLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjM2X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjM2LzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjM2X21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjM2LzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjM2X21jcC4xMTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjM2LzIwMTEgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjM2X21jcC4xMjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjM2LzIwMTIgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjY2X21jcC4wODwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjY2LzIwMDggLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjY2X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjY2LzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjY2X21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjY2LzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExOV9tY3AuMDg8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTkvMjAwOCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTE5X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExOS8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTlfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTE5LzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExMl9tY3AuMDc8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTIvMjAwNyAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTEyX21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExMi8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTJfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTEyLzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTY5X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTY5LzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTY5X21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTY5LzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCiMjIEZvcnRpZnkgbWNwIHBvbHlnb25zIGZvciBnZ3Bsb3QyICpZRUFSKjoKRjEwNF9tY3AuMDhUIDwtIGZvcnRpZnkoRjEwNF9tY3AuMDgsIHJlZ2lvbiA9ICJpZCIpCkYxMDRfbWNwLjA5VCA8LSBmb3J0aWZ5KEYxMDRfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpGMTE0X21jcC4wOFQgPC0gZm9ydGlmeShGMTE0X21jcC4wOCwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuMDlUIDwtIGZvcnRpZnkoRjExNF9tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLjEwVCA8LSBmb3J0aWZ5KEYxMTRfbWNwLjEwLCByZWdpb24gPSAiaWQiKQpGMTE0X21jcC4xMVQgPC0gZm9ydGlmeShGMTE0X21jcC4xMSwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuMTJUIDwtIGZvcnRpZnkoRjExNF9tY3AuMTIsIHJlZ2lvbiA9ICJpZCIpCkYxMzdfbWNwLjA5VCA8LSBmb3J0aWZ5KEYxMzdfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpGMTM3X21jcC4xMFQgPC0gZm9ydGlmeShGMTM3X21jcC4xMCwgcmVnaW9uID0gImlkIikKRjEzN19tY3AuMTFUIDwtIGZvcnRpZnkoRjEzN19tY3AuMTEsIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLjA5VCA8LSBmb3J0aWZ5KEYxNDdfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpGMTQ3X21jcC4xMFQgPC0gZm9ydGlmeShGMTQ3X21jcC4xMCwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuMTFUIDwtIGZvcnRpZnkoRjE0N19tY3AuMTEsIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLjEyVCA8LSBmb3J0aWZ5KEYxNDdfbWNwLjEyLCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLjA4VCA8LSBmb3J0aWZ5KEYzNl9tY3AuMDgsIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuMDlUIDwtIGZvcnRpZnkoRjM2X21jcC4wOSwgcmVnaW9uID0gImlkIikKRjM2X21jcC4xMFQgPC0gZm9ydGlmeShGMzZfbWNwLjEwLCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLjExVCA8LSBmb3J0aWZ5KEYzNl9tY3AuMTEsIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuMTJUIDwtIGZvcnRpZnkoRjM2X21jcC4xMiwgcmVnaW9uID0gImlkIikKRjY2X21jcC4wOFQgPC0gZm9ydGlmeShGNjZfbWNwLjA4LCByZWdpb24gPSAiaWQiKQpGNjZfbWNwLjA5VCA8LSBmb3J0aWZ5KEY2Nl9tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCkY2Nl9tY3AuMTBUIDwtIGZvcnRpZnkoRjY2X21jcC4xMCwgcmVnaW9uID0gImlkIikKTTExOV9tY3AuMDhUIDwtIGZvcnRpZnkoTTExOV9tY3AuMDgsIHJlZ2lvbiA9ICJpZCIpCk0xMTlfbWNwLjA5VCA8LSBmb3J0aWZ5KE0xMTlfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpNMTE5X21jcC4xMFQgPC0gZm9ydGlmeShNMTE5X21jcC4xMCwgcmVnaW9uID0gImlkIikKTTExMl9tY3AuMDdUIDwtIGZvcnRpZnkoTTExMl9tY3AuMDcsIHJlZ2lvbiA9ICJpZCIpCk0xMTJfbWNwLjA5VCA8LSBmb3J0aWZ5KE0xMTJfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpNMTEyX21jcC4xMFQgPC0gZm9ydGlmeShNMTEyX21jcC4xMCwgcmVnaW9uID0gImlkIikKTTY5X21jcC4wOVQgPC0gZm9ydGlmeShNNjlfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpNNjlfbWNwLjEwVCA8LSBmb3J0aWZ5KE02OV9tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCk0yMTVfbWNwLjExVCA8LSBmb3J0aWZ5KE0yMTVfbWNwLjExLCByZWdpb24gPSAiaWQiKQpNMjE1X21jcC4xMlQgPC0gZm9ydGlmeShNMjE1X21jcC4xMiwgcmVnaW9uID0gImlkIikKCgptY3Auc2hpZnQuVEVTVDQgPC0gZ2dwbG90KCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMDRfbWNwLjA4VCwgYWVzKHg9RjEwNF9tY3AuMDhUJGxvbmcsIHk9RjEwNF9tY3AuMDhUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEwNF9tY3AuMDlULCBhZXMoeD1GMTA0X21jcC4wOVQkbG9uZywgeT1GMTA0X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC4wOFQsIGFlcyh4PUYxMTRfbWNwLjA4VCRsb25nLCB5PUYxMTRfbWNwLjA4VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLjA5VCwgYWVzKHg9RjExNF9tY3AuMDlUJGxvbmcsIHk9RjExNF9tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuMTBULCBhZXMoeD1GMTE0X21jcC4xMFQkbG9uZywgeT1GMTE0X21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC4xMVQsIGFlcyh4PUYxMTRfbWNwLjExVCRsb25nLCB5PUYxMTRfbWNwLjExVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLjEyVCwgYWVzKHg9RjExNF9tY3AuMTJUJGxvbmcsIHk9RjExNF9tY3AuMTJUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuMDlULCBhZXMoeD1GMTM3X21jcC4wOVQkbG9uZywgeT1GMTM3X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTM3X21jcC4xMFQsIGFlcyh4PUYxMzdfbWNwLjEwVCRsb25nLCB5PUYxMzdfbWNwLjEwVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMzdfbWNwLjExVCwgYWVzKHg9RjEzN19tY3AuMTFUJGxvbmcsIHk9RjEzN19tY3AuMTFUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjE0N19tY3AuMDlULCBhZXMoeD1GMTQ3X21jcC4wOVQkbG9uZywgeT1GMTQ3X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0xKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjE0N19tY3AuMTBULCBhZXMoeD1GMTQ3X21jcC4xMFQkbG9uZywgeT1GMTQ3X21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0xKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjE0N19tY3AuMTFULCBhZXMoeD1GMTQ3X21jcC4xMVQkbG9uZywgeT1GMTQ3X21jcC4xMVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0xKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjE0N19tY3AuMTJULCBhZXMoeD1GMTQ3X21jcC4xMlQkbG9uZywgeT1GMTQ3X21jcC4xMlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0xKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC4wOFQsIGFlcyh4PUYzNl9tY3AuMDhUJGxvbmcsIHk9RjM2X21jcC4wOFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTYpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMzZfbWNwLjA5VCwgYWVzKHg9RjM2X21jcC4wOVQkbG9uZywgeT1GMzZfbWNwLjA5VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NikgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuMTBULCBhZXMoeD1GMzZfbWNwLjEwVCRsb25nLCB5PUYzNl9tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT02KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC4xMVQsIGFlcyh4PUYzNl9tY3AuMTFUJGxvbmcsIHk9RjM2X21jcC4xMVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTYpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMzZfbWNwLjEyVCwgYWVzKHg9RjM2X21jcC4xMlQkbG9uZywgeT1GMzZfbWNwLjEyVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NikgKwogIGdlb21fcG9seWdvbihkYXRhPUY2Nl9tY3AuMDhULCBhZXMoeD1GNjZfbWNwLjA4VCRsb25nLCB5PUY2Nl9tY3AuMDhUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0xKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC4wOVQsIGFlcyh4PUY2Nl9tY3AuMDlUJGxvbmcsIHk9RjY2X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTEpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GNjZfbWNwLjEwVCwgYWVzKHg9RjY2X21jcC4xMFQkbG9uZywgeT1GNjZfbWNwLjEwVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPU0xMTlfbWNwLjA4VCwgYWVzKHg9TTExOV9tY3AuMDhUJGxvbmcsIHk9TTExOV9tY3AuMDhUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1NMTE5X21jcC4wOVQsIGFlcyh4PU0xMTlfbWNwLjA5VCRsb25nLCB5PU0xMTlfbWNwLjA5VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9TTExOV9tY3AuMTBULCBhZXMoeD1NMTE5X21jcC4xMFQkbG9uZywgeT1NMTE5X21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPU0xMTJfbWNwLjA3VCwgYWVzKHg9TTExMl9tY3AuMDdUJGxvbmcsIHk9TTExMl9tY3AuMDdUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1NMTEyX21jcC4wOVQsIGFlcyh4PU0xMTJfbWNwLjA5VCRsb25nLCB5PU0xMTJfbWNwLjA5VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9TTExMl9tY3AuMTBULCBhZXMoeD1NMTEyX21jcC4xMFQkbG9uZywgeT1NMTEyX21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MykgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9TTY5X21jcC4wOVQsIGFlcyh4PU02OV9tY3AuMDlUJGxvbmcsIHk9TTY5X21jcC4wOVQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIpICsKICAjIGdlb21fcG9seWdvbihkYXRhPU02OV9tY3AuMTBULCBhZXMoeD1NNjlfbWNwLjEwVCRsb25nLCB5PU02OV9tY3AuMTBUJGxhdCksCiAgIyAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siKSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1NMjE1X21jcC4xMVQsIGFlcyh4PU0yMTVfbWNwLjExVCRsb25nLCB5PU0yMTVfbWNwLjExVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIikgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9TTIxNV9tY3AuMTJULCBhZXMoeD1NMjE1X21jcC4xMlQkbG9uZywgeT1NMjE1X21jcC4xMlQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIpICsKICB0aGVtZV9idygpICtsYWJzKHg9IkVhc3RpbmcgKG0pIiwgeT0iTm9ydGhpbmcgKG0pIikgKwogIGxhYnMoY2FwdGlvbiA9ICJGaWd1cmUgNCAgfCAgWWVhcmx5IGhvbWUgcmFuZ2Ugc2hpZnRzIG9mIHN1Yi1zYW1wbGVkIGhvbWUgcmFuZ2VzIG9mIDggbGl6YXJkcywgYm90aCBtYWxlcyBhbmQgZmVtYWxlcy4gSG9tZSBcbiByYW5nZSBzaGlmdHMgYXBwZWFyIHRvIGJlIHJlbGF0aXZsZXkgc3RhYmxlIG92ZXIgc3R1ZHkgeWVhcnMuIikrCiAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCxsaW5laGVpZ2h0ID0gMC45KSkKICAjIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIsIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgaGp1c3QgPSAwLjUpKQoKbWNwLnNoaWZ0LlRFU1Q0CmBgYAoKCgoKCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5SZXBlYXRlZCBtZWFzdXJlcyBBTk9WQSBmb3IgWWVhcmx5IEhvbWUgUmFuZ2VzLjwvc3Bhbj4KCmBgYHtyIFJNQU5PVkEgWUVBUkxZIE9WRVJBTEwgMTAwJU1DUCwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMgR2V0IHAtdmFsdWVzIGZyb20gbWl4ZWQgbW9kZWwgRiB2YWx1ZXM6CmxpYnJhcnkobG1lNCkKbGlicmFyeShyZWFkcikKeWVhciA8LSByZWFkX2NzdigiR01fQ29uc29saWRhdGVkX0J5WWVhci5jc3YiKQoKUk1tb2QueWVhcjwtbG1lcihIb21lX1JhbmdlXzEwMG1jcH5FbnZpcm9ubWVudCtZZWFyK1NleCtOMTAwK0Vudmlyb25tZW50KlNleCsKICAgICAgICAgICAgICAgICAgICgxfEdpbGEpLGRhdGEgPSB5ZWFyKQpzdW1tYXJ5KFJNbW9kLnllYXIpCmBgYAoKCgpBTk9WQSBUYWJsZTogMTAwJSBNQ1AKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KYW5vdmEoUk1tb2QueWVhcikKYGBgCgoKCmBgYHtyIFJNQU5PVkEgWUVBUkxZIE9WRVJBTEwgOTUlIE1DUCwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9ClJNbW9kLnllYXI5NTwtbG1lcihIb21lX1JhbmdlXzk1bWNwfkVudmlyb25tZW50K1llYXIrU2V4K04xMDArRW52aXJvbm1lbnQqU2V4KwogICAgICAgICAgICAgICAgICAgKDF8R2lsYSksZGF0YSA9IHllYXIpCnN1bW1hcnkoUk1tb2QueWVhcjk1KQpgYGAKCgoKQU5PVkEgVGFibGU6IDk1JSBNQ1AKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmFub3ZhKFJNbW9kLnllYXI5NSkKYGBgCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApgYGB7ciBSYXcgYW5kIEVNTWVhbnMgb2YgWWVhcmx5IE92ZXJhbGwgMTAwJU1DUCwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9ClJNbW9kLnllYXIxMDA8LWxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+RW52aXJvbm1lbnQrWWVhcitTZXgrTjEwMCtFbnZpcm9ubWVudCpTZXgrKDF8R2lsYSksZGF0YSA9IHllYXIpCgpSTS5tYXJnaW5hbCA8LSBsc21lYW5zKFJNbW9kLnllYXIxMDAsIAogICAgICAgICAgICAgICAgICAgIH4gRW52aXJvbm1lbnQpCiMgUk0ubWFyZ2luYWwKCiMjIENBVEFHT1JJWkUgTFNNIEdSQVBIIEJZIFNFWCBCRVRXRUVOIEVOVklST05NRU5UOgpyZWZSTV9zZXggPC0gbHNtZWFucyhSTW1vZC55ZWFyMTAwLCBzcGVjcyA9IGMoIkVudmlyb25tZW50IiwiU2V4IikpCgojIHJlZlJNX3NleApyZWZfZGZSTV9zZXggPC0gYXMuZGF0YS5mcmFtZShzdW1tYXJ5KHJlZlJNX3NleCkpCnBkX1JNIDwtIHBvc2l0aW9uX2RvZGdlKDAuMSkKCnlyLm1lYW4uYWRqPC1nZ3Bsb3QocmVmX2RmUk1fc2V4LCBhZXMoeD1TZXgseT1sc21lYW4sZ3JvdXA9RW52aXJvbm1lbnQpKSsKICBnZW9tX3BvaW50KGFlcyhzaGFwZSA9IGZhY3RvcihFbnZpcm9ubWVudCkpLCBzaXplID0gMixwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguMSksIAogICAgICAgICAgICBzaG93LmxlZ2VuZCA9IEZBTFNFKSsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPWxzbWVhbi1TRSwgeW1heD1sc21lYW4rU0UpLCB3aWR0aD0uMSxwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgpKSsKICAjIGdndGl0bGUoIkFkanVzdGVkIEhvbWUgUmFuZ2VzIGJ5IFNleCBhbmQgUG9wdWxhdGlvbiAoMTAwJSBNQ1ApIikrCiAgeGxhYigiU2V4IikrCiAgeWxhYigiIikKICAjIGxhYnMoY2FwdGlvbiA9ICJGaWd1cmUgNSAgfCAgQWRqdXN0ZWQgaG9tZSByYW5nZXMgdXNpbmcgMTAwJSBNQ1BzIGJldHdlZW4gc2V4ZXMgb2Ygbm9uLXN1YnNpZGl6ZWQgYW5kIHN1YnNpZGl6ZWQgcG9wdWxhdGlvbnMuIFxuIEFkanVzdGVkIGZvciBlbnZpcm9ubWVudCwgeWVhciwgc2V4LCBhbmQgc2FtcGxlIHNpemUuIE1hbGUgaG9tZSByYW5nZXMgcmVtYWluZWQgc21hbGxlciB0aGFuIHRob3NlIG9mIGZlbWFsZXMgYXQgXG4gT3dsIEhlYWQgQnV0dGVzLiIpKwogICMgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCxsaW5laGVpZ2h0ID0gMC45KSkKICAjIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGNvbG9yPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSkKCiMgeXIubWVhbi5hZGo8LXlyLm1lYW4uYWRqICsgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAojICAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5qdXN0aWZpY2F0aW9uPWMoMCwxKSwKIyAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQucG9zaXRpb249YygwLjA1LCAwLjk1KSwKIyAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQua2V5ID0gZWxlbWVudF9ibGFuaygpLAojICAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siKSkKIyB5ci5tZWFuLmFkagojIHJtKExTTS5ZZWFySFIpCgpwZF9STSA8LSBwb3NpdGlvbl9kb2RnZSgwLjEpCgpSYXcuWWVhckhSPC1nZ3Bsb3QoWVJfR1JQX01lYW5zLCBhZXMoeD1TZXgseT1Ib21lX1JhbmdlXzEwMG1jcCxncm91cD1FbnZpcm9ubWVudCkpKwogIGdlb21fcG9pbnQoYWVzKHNoYXBlID0gZmFjdG9yKEVudmlyb25tZW50KSksIHNpemUgPSAyLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC4xKSkrCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1Ib21lX1JhbmdlXzEwMG1jcC1zZSwgeW1heD1Ib21lX1JhbmdlXzEwMG1jcCtzZSksCiAgICAgICAgICAgICAgICB3aWR0aD0uMSxwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgpKSsKICAjIGdndGl0bGUoIk92ZXJhbGwgSG9tZSBSYW5nZXMgYnkgU2V4IGFuZCBQb3B1bGF0aW9uICgxMDAlIE1DUCkiKSsKICB4bGFiKCJTZXgiKSsKICB5bGFiKCIxMDAlIE1DUCBBcmVhIChoYSkiKQogICMgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgY29sb3I9ImJsYWNrIiwgc2l6ZT0xNCwgZmFjZT0iYm9sZCIpKQogICMgbGFicyhjYXB0aW9uID0gIkZpZ3VyZSAzIHwgUmF3IG92ZXJhbGwgbWVhbiBob21lIHJhbmdlcyBiZXR3ZWVuIGVudmlyb25tZW50IGFuZCBzZXggdXNpbmcgMTAwJSBNQ1BzLiBOb3RlLCB0aGF0IGJlZm9yZSBhZGp1c3RlZCBcbiBob21lIHJhbmdlcywgbWFsZXMgZXhoaWJpdCBzbWFsbGVyIG92ZXJhbGwgaG9tZSByYW5nZXMgYXQgU3RvbmUgQ2FueW9uLCB0aGFuIG1hbGVzIG9mIE93bCBIZWFkIEJ1dHRlcy4iKSsKICAjIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsbGluZWhlaWdodCA9IDAuOSkpCgp5ci5tZWFuLnJhdzwtUmF3LlllYXJIUiArIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmp1c3RpZmljYXRpb249YygwLDEpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQucG9zaXRpb249YygwLjA1LCAwLjk1KSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5rZXkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siKSkKIyB5ci5tZWFuLnJhdwoKbGlicmFyeShncmlkRXh0cmEpCmxpYnJhcnkoZ3JpZCkKCmdyaWQuYXJyYW5nZSh5ci5tZWFuLnJhdywgeXIubWVhbi5hZGosIG5yb3cgPSAxLCAgCiAgICAgICAgICAgICBib3R0b20gPSB0ZXh0R3JvYigiRmlndXJlIHggfCBhLiBSYXcgZ3JvdXAgbWVhbnMgb2Ygb3ZlcmFsbCB5ZWFybHkgaG9tZSByYW5nZXMgYmV0d2VlbiBtYWxlcyBhbmQgZmVtYWxlcy4gTm90ZSB0aGF0IHRoZSBtYWxlIFxuIGhvbWUgcmFuZ2Ugb2YgdGhlIHN1YnNpZGl6ZWQgcG9wdWxhdGlvbiBpcyBzbWFsbGVyIHRoYW4gdGhhdCBvZiB0aGUgZmVtYWxlIGhvbWUgcmFuZ2UgaW4gdGhlIG5vbi1zdWJzaWRpemVkIFxuIHBvcHVsYXRpb24uIGIuIEdyb3VwIG1lYW5zIG9mIGhvbWUgcmFuZ2VzIGFmdGVyIGJlaW5nIGFkanVzdGVkIGZvciBlbnZpcm9ubWVudCwgeWVhciwgc2V4LCBhbmQgc2FtcGxlIHNpemUuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwID0gZ3Bhcihmb250ZmFjZSA9IDEsZm9udHNpemUgPSAxMCksaGp1c3QgPSAwLCB4ID0gMCkpCmBgYAoKCgoKClRhYmxlIDQuIERpcmVjdGlvbmFsIG1lYW5zIG9mIGhvbWUgcmFuZ2UgYWZ0ZXIgYmVpbmcgYWRqdXN0ZWQgZm9yIHllYXIsIHNleCBhbmQgc2FtcGxlIHNpemUuCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmthYmxlKHJlZl9kZlJNX3NleCwgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnVGFibGUgNC4gRGlyZWN0aW9uYWwgbWVhbnMgb2YgaG9tZSByYW5nZSBhZnRlciBiZWluZyBhZGp1c3RlZCBmb3IgeWVhciwgc2V4IGFuZCBzYW1wbGUgc2l6ZS4nKQpgYGAKCiAKICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApQb3N0LUhvYyBjb21wYXJpc29ucyBiZXR3ZWVuIHNleGVzIGFuZCBlbnZpcm9ubWVudDoKYGBge3IgQ29tcHMgZm9yIFNleCwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9ClJNbW9kLnllYXIuRW08LWxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+RW52aXJvbm1lbnQrWWVhcitTZXgrTjEwMCtFbnZpcm9ubWVudCpTZXgrCiAgICAgICAgICAgICAgICAgICAgICAoMXxHaWxhKSxkYXRhID0geWVhcikKCiMgU2V4LmVtbS5vYSA8LSBlbW1lYW5zKFJNbW9kLnllYXIuRW0sIGMoIkVudmlyb25tZW50IiwiU2V4IikpCiMgcGFpcnMoU2V4LmVtbS5vYSkKCmVtbV9zLnQyIDwtIGVtbWVhbnMoUk1tb2QueWVhci5FbSwgcGFpcndpc2UgfiBTZXggfCBFbnZpcm9ubWVudCkKZW1tX3MudDIKYGBgCgoKCkdyYXBoaWNhbCBDb21wYXJpc29ucyBvZiBTZXggV2l0aGluIEVhY2ggRW52aXJvbm1lbnQ6CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpwbG90KGVtbV9zLnQyLCBjb21wYXJpc29ucyA9IFRSVUUsIHhsYWIgPSAiTGVhc3QgU3F1YXJlIE1lYW4gKGhhKSIsIHlsYWIgPSAiRW52aXJvbm1lbnQiKQpgYGAKRmlndXJlIDYgfCBQYWlyd2lzZSBjb21wYXJpc29ucyBvZiBob21lIHJhbmdlIGJldHdlZW4gc2V4ZXMgd2l0aGluIGVhY2ggZW52aXJvbm1lbnQuIElmIHJlZCBhcnJvd3Mgb3ZlcmxhcCB0aG9zZSBvZiBvdGhlcnMsIHRoZW4gIHRoZXJlIGlzIG5vIHNpZ25pZmljYW50IHN0YXRpc3RpY2FsIGRpZmZlcmVuY2UuIAoKCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmVtbV9zLnQzIDwtIGVtbWVhbnMoUk1tb2QueWVhci5FbSwgcGFpcndpc2UgfiBFbnZpcm9ubWVudCB8IFNleCkKZW1tX3MudDMKYGBgCgoKCkdyYXBoaWNhbCBDb21wYXJpc29ucyBvZiBTZXggYmV0d2VlbiB0aGUgdHdvIHBvcHVsYXRpb25zOgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KcGxvdChlbW1fcy50MywgY29tcGFyaXNvbnMgPSBUUlVFLCB4bGFiID0gIkxlYXN0IFNxdWFyZSBNZWFuIChoYSkiLCB5bGFiID0gIkVudmlyb25tZW50IikKYGBgCkZpZ3VyZSA3IHwgUGFpcndpc2UgY29tcGFyaXNvbnMgb2Ygc2V4IGJldHdlZW4gZW52aXJvbm1lbnRzLiBJZiByZWQgYXJyb3dzIG92ZXJsYXAgdGhvc2Ugb2Ygb3RoZXJzLCB0aGVuIHRoZXJlIGlzIG5vIHNpZ25pZmljYW50IHN0YXRpc3RpY2FsIGRpZmZlcmVuY2UuIAogCiAKIAogCiAKIApBdCBTdG9uZSBDYW55b24sIG1hbGUgeWVhcmx5IGhvbWUgcmFuZ2VzIHJhbmdlZCBmcm9tIDEuOTEgLSAyNS4xIGhhLCB3aXRoIGEgbWVhbiBvZiAxMS44IMKxIDEuNyBTLkUuIGhhICgxMDAlIE1DUCksIDkuMiDCsSAxLjMgUy5FLiBIYSAoOTUlIE1DUCkuIEZlbWFsZSBob21lIHJhbmdlcyByYW5nZWQgZnJvbSAyLjA2IOKAkyAzOC44MSBoYSBhbmQgYSBtZWFuIG9mIDkuOCDCsSAxLjEgUy5FLiBoYSAoMTAwJSBNQ1ApLCA3LjEgwrEgMC43IFMuRS4gaGEgKDk1JSBNQ1ApLiBNYWxlIEdpbGEgTW9uc3RlcnMgYXQgT3dsIGhlYWQgQnV0dGVzIGhhZCBob21lIHJhbmdlcyB0aGF0IHJhbmdlZCBmcm9tIDEwLjYg4oCTIDgyLjcgaGEgd2l0aCBhIG1lYW4gb2YgNDMuMiDCsSA1LjcgUy5FLiBoYSAoMTAwJSBNQ1ApLCA0MS45IMKxIDQuOSBTLkUuIGhhICg5NSUgTUNQKS4gRmVtYWxlIGhvbWUgcmFuZ2VzIHJhbmdlZCBmcm9tIDcuMSDigJMgNDcuNiB3aXRoIGEgbWVhbiBvZiAyMi4wIMKxIDMuNyBTLkUuIGhhICgxMDAlIE1DUCksIDIwLjYgwrEgMi41IFMuRS4gaGEgKDk1JSBNQ1ApLiBJbiB0aGUgYW5hbHlzZXMgb2YgYm90aCBwb3B1bGF0aW9ucywgeWVhciBoYWQgbm8gZWZmZWN0IG9uIGhvbWUgcmFuZ2Ugc2l6ZXMgKEYgPSAwLjM4LCBQID0gMC41NCksIHdoaWxlIHRoZXJlIHdhcyBhIGRldGVjdGVkIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgaW4gaG9tZSByYW5nZXMgYmV0d2VlbiB0aGUgdHdvIHBvcHVsYXRpb25zIChGID0gOC4zNSwgUCA9IDAuMDA1KSwgYXMgd2VsbCBhcyBzZXggKEYgPSAxNi42OCwgUCA9IDAuMDAwNCkuIFBvc3QtSG9jIGFuYWx5c2VzIGJldHdlZW4gc2V4ZXMgaW5kaWNhdGVkIHRoYXQgdGhlcmUgd2FzIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiBtYWxlIGhvbWUgcmFuZ2VzIGJldHdlZW4gdGhlIHR3byBlbnZpcm9ubWVudHMgKGRmID0gNjguMywgUCA9IDAuMDAxKS4gVGhlcmUgd2FzIGEgc2xpZ2h0IGRpZmZlcmVuY2Ugb2YgZmVtYWxlIGhvbWUgcmFuZ2VzIGJldHdlZW4gdGhlIHR3byBlbnZpcm9ubWVudHMsIGhvd2V2ZXIgaXQgd2FzIG5vdCBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IChkZiA9IDY4LjcsIFAgPSAwLjA3KS4gQXQgc3RvbmUgY2FueW9uIHRoZXJlIHdhcyBubyBtYWpvciBkaWZmZXJlbmNlIGJldHdlZW4gbWFsZSBhbmQgZmVtYWxlIGhvbWUgcmFuZ2VzIChkZiA9IDMxLjgsIFAgPSAwLjE2KSB3aXRoIG1hbGUgaG9tZSByYW5nZSBiZWluZyBvbmx5IDMlIGxhcmdlciB0aGFuIGZlbWFsZXMuIE1hbGVzIGF0IE93bCBIZWFkIEJ1dHRlcyBoYWQgYSA2NSUgbGFyZ2VyIGhvbWUgcmFuZ2UgdGhhbiBkaWQgZmVtYWxlcywgYW5kIHdhcyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IChkZiA9IDMxLjMsIFAgPSAwLjAwMDMpLiBJbnRlcmVzdGluZ2x5LCBtYWxlcyBhdCBTdG9uZSBDYW55b24gaGFkIHNtYWxsZXIgaG9tZSByYW5nZXMgdGhhbiBkaWQgdGhlIGZlbWFsZXMgYXQgT3dsIEhlYWQgQnV0dGVzIChUYWJsZSB4KSBXaGVuIHVzaW5nIDk1JSBNQ1BzLCBtYWxlIGhvbWUgcmFuZ2VzIHJlZHVjZWQgYnkgMjUlIGFuZCBmZW1hbGUgcmFuZ2UgYnkgMzElLiBBdCBPd2wgSGVhZCBCdXR0ZXMsIEdpbGEgTW9uc3RlcnMgc2hvd2VkIGEgc2ltaWxhciBiZWhhdmlvciB3aXRoIG1hbGUgaG9tZSByYW5nZXMgcmVkdWNlZCBieSAyMCUgYW5kIGZlbWFsZSByYW5nZXMgcmVkdWNlZCBieSAyNiUgdXNpbmcgOTUlIE1DUHMuIAogIAogCiAKIAoKIAogCiMjIE92ZXJhbGwgWWVhcmx5IEhvbWUgUmFuZ2VzIChLREUpCgoKSG9tZSByYW5nZSBlc3RpbWF0aW9uIG9uIHRoZSBTdG9uZSBDYW55b24gR2lsYSBNb25zdGVycyB1c2luZyA5NSUgS0RFcyB3aXRoIGhyZWYgYmFuZHdpZHRoIHByb2R1Y2VkIG1hbGUgaG9tZSByYW5nZXMgcmFuZ2luZyBmcm9tIDE0LjUg4oCTIDU1LjMgaGEgd2l0aCBhIG1lYW4gb2YgMzUuMCDCsSAzLjMgUy5FLiBoYS4gRmVtYWxlIGhvbWUgcmFuZ2VzIHJhbmdlZCBmcm9tIDEwLjEg4oCTIDQ3LjggaGEgd2l0aCBhIG1lYW4gb2YgMjIuOSDCsSAxLjggUy5FLiBLREUgZXN0aW1hdGVzIGZvciBtYWxlIGFuZCBmZW1hbGUgaG9tZSByYW5nZXMgd2VyZSA5NiUgYW5kIDgwJSBsYXJnZXIgdGhhbiBNQ1AgZXN0aW1hdGVzLiBSZXBlYXRlZCBNZWFzdXJlcyBhbmFseXNpcyBvZiBLREVzIHN1Z2dlc3RlZCB0aGF0IHRoZXJlIHdhcyBhIHNtYWxsIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgYmV0d2VlbiBtYWxlIGFuZCBmZW1hbGUgaG9tZSByYW5nZXMgYXQgU3RvbmUgQ2FueW9uIChGID0gNS41NiwgUCA9IDAuMDA5KS4gWWVhciBkaWQgbm90IGhhdmUgYW4gZWZmZWN0IG9uIGhvbWUgcmFuZ2VzIChGID0gMC41NywgUCA9IDAuNDUpLiAKCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KeWVhci5rZGU8LXJlYWRfY3N2KCd5ZWFybHkga2RlIHRhYmxlLmNzdicpCmthYmxlKHllYXIua2RlLCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdZZWFybHkgS0RFIEhvbWUgUmFuZ2VzJykKYGBgCgoKCgoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpzdWIgPC0gc3Vic2V0KHllYXIsIEVudmlyb25tZW50ID09ICJzdWJzaWRpemVkIikKCllSX0dSUF9NZWFucy5LREUgPC0gc3VtbWFyeVNFKHN1YiwgbWVhc3VyZXZhcj0iSG9tZV9SYW5nZV85NWtkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHZhcnM9YygiU2V4IiksbmEucm0gPSBUUlVFKQoKa2FibGUoWVJfR1JQX01lYW5zLktERSwgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnVGFibGUgIHwgUmF3IEdyb3VwIDk1JSBLREUgaG9tZSByYW5nZSBtZWFucyBvZiBTdG9uZSBDYW55b24gYW5kIE93bCBIZWFkIEJ1dHRlcy4gR3JvdXBlZCBieSBlbnZpcm9ubWVudCBhbmQgc2V4LicpCmBgYAogCgoKIAogCiAKIAo8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+UmVwZWF0ZWQgbWVhc3VyZXMgQU5PVkEgZm9yIEtERSBIb21lIFJhbmdlcy48L3NwYW4+CgpSZXBlYXRlZCBNZWFzdXJlIEFOT1ZBIGZvciA5NSUgS0RFIG92ZXJhbGwgaG9tZSByYW5nZXMKYGBge3IgUmVwZWF0ZWQgTWVhc3VyZXMgQU5PVkEgS0RFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KIyBHZXQgcC12YWx1ZXMgZnJvbSBtaXhlZCBtb2RlbCBGIHZhbHVlczoKClJNLktERW1vZC55ZWFyPC1sbWVyKEhvbWVfUmFuZ2VfOTVrZGV+WWVhcitTZXgrTisoMXxHaWxhKSxkYXRhID0gc3ViKQoKc3VtbWFyeShSTS5LREVtb2QueWVhcikKYGBgCiAKQU5PVkEgVGFibGUgZm9yIDk1JSBLREUgKHN1YnNpZGl6ZWQpCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQphbm92YShSTS5LREVtb2QueWVhcikKYGBgCgoKCgpSZXBlYXRlZCBNZWFzdXJlIEFOT1ZBIGZvciA1MCUgS0RFIG92ZXJhbGwgaG9tZSByYW5nZXMKYGBge3IgUmVwZWF0ZWQgTWVhc3VyZXMgQU5PVkE1MCUgS0RFLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KIyBHZXQgcC12YWx1ZXMgZnJvbSBtaXhlZCBtb2RlbCBGIHZhbHVlczoKClJNLktERS41MC5tb2QueWVhcjwtbG1lcihIb21lX1JhbmdlXzUwa2RlflllYXIrU2V4K04rKDF8R2lsYSksZGF0YSA9IHN1YikKCnN1bW1hcnkoUk0uS0RFLjUwLm1vZC55ZWFyKQpgYGAKCgpBTk9WQSBUYWJsZSBmb3IgNTAlIEtERSAoc3Vic2lkaXplZCkKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmFub3ZhKFJNLktERS41MC5tb2QueWVhcikKYGBgCiAKIAoKIAogCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpsaWJyYXJ5KGdyaWRFeHRyYSkKbGlicmFyeShncmlkKQoKUmF3LktERS5IUjwtZ2dwbG90KFlSX0dSUF9NZWFucy5LREUsIGFlcyh4PVNleCx5PUhvbWVfUmFuZ2VfOTVrZGUpKSsKICBnZW9tX3BvaW50KHNpemUgPSAyLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguMSkpKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49SG9tZV9SYW5nZV85NWtkZS1zZSwgeW1heD1Ib21lX1JhbmdlXzk1a2RlK3NlKSwKICAgICAgICAgICAgICAgIHdpZHRoPS4xLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKCkpKwogICMgZ2d0aXRsZSgiT3ZlcmFsbCBIb21lIFJhbmdlcyBieSBTZXggYW5kIFBvcHVsYXRpb24gKDEwMCUgTUNQKSIpKwogIHhsYWIoIlNleCIpKwogIHlsYWIoIjk1JSBLREUgQXJlYSAoaGEpIikrCiAgICMgbGFicyhjYXB0aW9uID0gIkZpZ3VyZSA4ICB8ICBSYXcgOTUlIEtERSBob21lIHJhbmdlcyBiZXR3ZWVuIG1hbGUgYW5kIGZlbWFsZSBob21lIHJhbmdlcyBhdCBTdG9uZSBDYW55b24uIikrCiAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCxsaW5laGVpZ2h0ID0gMC45KSkKICAjIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGNvbG9yPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSkKClJhdy5LREUuSFI8LVJhdy5LREUuSFIgKyB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5qdXN0aWZpY2F0aW9uPWMoMCwxKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoMC4wNSwgMC45NSksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQua2V5ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIikpCiMgUmF3LktERS5IUgoKUk0uS0RFbW9kLnllYXI8LWxtZXIoSG9tZV9SYW5nZV85NWtkZX5ZZWFyK1NleCtOKygxfEdpbGEpLGRhdGEgPSBzdWIpCgpLREUubWFyZ2luYWwgPC0gbHNtZWFucyhSTS5LREVtb2QueWVhciwgCiAgICAgICAgICAgICAgICAgICAgfiBTZXgpCiMgUk0ubWFyZ2luYWwKCiMjIENBVEFHT1JJWkUgTFNNIEdSQVBIIEJZIFNFWCBCRVRXRUVOIEVOVklST05NRU5UOgpyZWZSTV9LREUgPC0gbHNtZWFucyhSTS5LREVtb2QueWVhciwgc3BlY3MgPSBjKCJTZXgiKSkKCiMgcmVmUk1fc2V4CnJlZl9kZlJNX0tERSA8LSBhcy5kYXRhLmZyYW1lKHN1bW1hcnkocmVmUk1fS0RFKSkKcGRfUk0gPC0gcG9zaXRpb25fZG9kZ2UoMC4xKQoKTFNNLktERS5IUjwtZ2dwbG90KHJlZl9kZlJNX0tERSwgYWVzKHg9U2V4LHk9bHNtZWFuKSkrCiAgZ2VvbV9wb2ludChzaXplID0gMixwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguMSkpKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49bHNtZWFuLVNFLCB5bWF4PWxzbWVhbitTRSksIHdpZHRoPS4xLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKCkpKwogICMgZ2d0aXRsZSgiQWRqdXN0ZWQgSG9tZSBSYW5nZXMgYnkgU2V4IGFuZCBQb3B1bGF0aW9uICgxMDAlIE1DUCkiKSsKICB4bGFiKCJTZXgiKSsKICB5bGFiKCIiKQogICMgbGFicyhjYXB0aW9uID0gIkZpZ3VyZSA4ICB8ICBBZGp1c3RlZCA5NSUgS0RFIGhvbWUgcmFuZ2VzIGJldHdlZW4gbWFsZSBhbmQgZmVtYWwgaG9tZSByYW5nZXMgYXQgU3RvbmUgQ2FueW9uLiBBZGp1c3RlZCBvbiB5ZWFyLCBcbiBzZXgsIGFuZCBzYW1wbGUgc2l6ZS4iKSsKICAjIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsbGluZWhlaWdodCA9IDAuOSkpCiAgIyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBjb2xvcj0iYmxhY2siLCBzaXplPTE0LCBmYWNlPSJib2xkIikpCgojIExTTS5LREUuSFI8LUxTTS5LREUuSFIgKyB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmp1c3RpZmljYXRpb249YygwLDEpLAojICAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbj1jKDAuMDUsIDAuOTUpLAojICAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAojICAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5rZXkgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIpKQojIExTTS5LREUuSFIKCmdyaWQuYXJyYW5nZShSYXcuS0RFLkhSLCBMU00uS0RFLkhSLCBucm93ID0gMSwgIAogICAgICAgICAgICAgYm90dG9tID0gdGV4dEdyb2IoIkZpZ3VyZSB4IHwgYS4gUmF3IGdyb3VwIG1lYW5zIG9mIG92ZXJhbGwgeWVhcmx5IDk1JSBLREVzIGJldHdlZW4gbWFsZXMgYW5kIGZlbWFsZXMgYXQgU3RvbmUgQ2FueW9uLiBcbiBiLiBBZGp1c3RlZCA5NSUgS0RFcyBhZnRlciBiZWluZyBhZGp1c3RlZCBmb3IgIHllYXIsIHNleCwgYW5kIHNhbXBsZSBzaXplLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncCA9IGdwYXIoZm9udGZhY2UgPSAxLGZvbnRzaXplID0gMTApLGhqdXN0ID0gMCwgeCA9IDApKQpgYGAKCiAKIAogCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQprYWJsZShyZWZfZGZSTV9LREUsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1RhYmxlICB8IERpcmVjdGlvbmFsIG1lYW5zIG9mIEtERSBob21lIHJhbmdlcyBhZnRlciBiZWluZyBhZGp1c3RlZCBmb3IgeWVhciwgc2V4IGFuZCBzYW1wbGUgc2l6ZS4nKQpgYGAKIAogCgoKCgogCiAKIAogCiMgU2Vhc29uYWwgSG9tZSBSYW5nZQogCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5TZWFzb25hbCBIb21lIFJhbmdlLjwvc3Bhbj4KCgpIb21lIHJhbmdlIGFuYWx5c2lzIGJyb2tlbiBkb3duIGJ5IGZpdmUgc2Vhc29uczsgRW1lcmdlbmNlLCBEcnksIE1vbnNvb24sIFBvc3QgTW9uc29vbi4gVGhlIHN0YXJ0IG9mIGVtZXJnZW5jZSB3YXMgZGVmaW5lZCBieSB3aGVuIG1vdmVtZW50IHBhdHRlcm5zIGluY3JlYXNlZCBmcm9tIG5vbmUvbWluaW1hbCB0byB0aGUgc3RhcnQgb2YgaGlnaCBhY3Rpdml0eS4gRWZmb3J0IHdhcyB0YWtlbiB0byBtYXRjaCBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlIHRvIHRoZSBPd2wgSGVhZCBCdXR0ZXMgZW1lcmdlbmNlIGRhdGUgaW50ZXJ2YWwuIE1vbnNvb24gc2Vhc29uIHdhcyBhZGp1c3RlZCB1c2luZyBOT0FBIGNsaW1hdGUgZGF0YS4gVGhlIHN0YXJ0IG9mIHdhcyBkZWZpbmVkIHdoZW4gdGhlIG1lYW4gZGV3IHBvaW50IHRlbXBlcmF0dXJlcyBvZiB0aHJlZSBjb25zZWN1dGl2ZSBkYXlzIHdlcmUgZ3JlYXRlciB0aGFuIDU1IGRlZ3JlZXMuIAoKU2NhbGluZyBob21lIHJhbmdlIGFuYWx5c2VzIGJ5IHNlYXNvbmFsIGVzdGltYXRlcyByZWR1Y2VzIHRoZSBudW1iZXIgb3IgbG9jYXRpb25zIGZvciBlYWNoIGxpemFyZC4gMTAwJSBNQ1BzIHdlcmUgdXNlZCBmb3Igc2Vhc29uYWwgaG9tZSByYW5nZSBhbmFseXNlcyB0byBhdm9pZCBhbnkgZnVydGhlciByZWR1Y3Rpb24gb2YgbG9jYXRpb25zIGZvciBlYWNoIGVzdGltYXRpb24uCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMjIENyZWF0ZSBNQ1AgcG9seWdvbnMgYnkgU0VBU09OOgpNMjE1X21jcC5FTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTIxNS9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTIxNV9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMjE1L0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMjE1X21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL00yMTUvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKTTExMl9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTEyL0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTEyX21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTIvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTEyX21jcC5QTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExMi9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCk0xMTlfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExOS9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExOV9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTE5L01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExOV9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTkvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpGMTE0X21jcC5FTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0L0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC5QTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCkYxMzdfbWNwLkVNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTM3L0VtZXJnZW5jZSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTM3X21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMzcvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMzdfbWNwLk1PTjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEzNy9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMzdfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTM3L1Bvc3RfTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKRjE0N19tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3L01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpGMjUyX21jcC5FTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjI1Mi9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjI1Ml9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMjUyL0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMjUyX21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YyNTIvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMjUyX21jcC5QTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjI1Mi9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCkYzNl9tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjM2X21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjM2X21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCkY2Nl9tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjY2X21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjY2X21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCiMjIEZvcnRpZnkgbWNwIHBvbHlnb25zIGZvciBnZ3Bsb3QyICpTRUFTT04qOgpNMjE1X21jcC5FTVQgPC0gZm9ydGlmeShNMjE1X21jcC5FTSwgcmVnaW9uID0gImlkIikKTTIxNV9tY3AuRFJZVCA8LSBmb3J0aWZ5KE0yMTVfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKTTIxNV9tY3AuTU9OVCA8LSBmb3J0aWZ5KE0yMTVfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKCk0xMTJfbWNwLkRSWVQgPC0gZm9ydGlmeShNMTEyX21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCk0xMTJfbWNwLk1PTlQgPC0gZm9ydGlmeShNMTEyX21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCk0xMTJfbWNwLlBNVCA8LSBmb3J0aWZ5KE0xMTJfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKTTExOV9tY3AuRFJZVCA8LSBmb3J0aWZ5KE0xMTlfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKTTExOV9tY3AuTU9OVCA8LSBmb3J0aWZ5KE0xMTlfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKTTExOV9tY3AuUE1UIDwtIGZvcnRpZnkoTTExOV9tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgpGMTE0X21jcC5FTVQgPC0gZm9ydGlmeShGMTE0X21jcC5FTSwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuRFJZVCA8LSBmb3J0aWZ5KEYxMTRfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuTU9OVCA8LSBmb3J0aWZ5KEYxMTRfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuUE1UIDwtIGZvcnRpZnkoRjExNF9tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgpGMTM3X21jcC5FTVQgPC0gZm9ydGlmeShGMTM3X21jcC5FTSwgcmVnaW9uID0gImlkIikKRjEzN19tY3AuRFJZVCA8LSBmb3J0aWZ5KEYxMzdfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjEzN19tY3AuTU9OVCA8LSBmb3J0aWZ5KEYxMzdfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKRjEzN19tY3AuUE1UIDwtIGZvcnRpZnkoRjEzN19tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgpGMTQ3X21jcC5FTVQgPC0gZm9ydGlmeShGMTQ3X21jcC5FTSwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuRFJZVCA8LSBmb3J0aWZ5KEYxNDdfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuTU9OVCA8LSBmb3J0aWZ5KEYxNDdfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuUE1UIDwtIGZvcnRpZnkoRjE0N19tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgpGMjUyX21jcC5FTVQgPC0gZm9ydGlmeShGMjUyX21jcC5FTSwgcmVnaW9uID0gImlkIikKRjI1Ml9tY3AuRFJZVCA8LSBmb3J0aWZ5KEYyNTJfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjI1Ml9tY3AuTU9OVCA8LSBmb3J0aWZ5KEYyNTJfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKRjI1Ml9tY3AuUE1UIDwtIGZvcnRpZnkoRjI1Ml9tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgpGMzZfbWNwLkVNVCA8LSBmb3J0aWZ5KEYzNl9tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuRFJZVCA8LSBmb3J0aWZ5KEYzNl9tY3AuRFJZLCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLk1PTlQgPC0gZm9ydGlmeShGMzZfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKRjM2X21jcC5QTVQgPC0gZm9ydGlmeShGMzZfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjY2X21jcC5FTVQgPC0gZm9ydGlmeShGNjZfbWNwLkVNLCByZWdpb24gPSAiaWQiKQpGNjZfbWNwLkRSWVQgPC0gZm9ydGlmeShGNjZfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjY2X21jcC5NT05UIDwtIGZvcnRpZnkoRjY2X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkY2Nl9tY3AuUE1UIDwtIGZvcnRpZnkoRjY2X21jcC5QTSwgcmVnaW9uID0gImlkIikKCm1jcC5zaGlmdC5URVNUNSA8LSBnZ3Bsb3QoKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuRU1ULCBhZXMoeD1GMTE0X21jcC5FTVQkbG9uZywgeT1GMTE0X21jcC5FTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLkRSWVQsIGFlcyh4PUYxMTRfbWNwLkRSWVQkbG9uZywgeT1GMTE0X21jcC5EUllUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLk1PTlQsIGFlcyh4PUYxMTRfbWNwLk1PTlQkbG9uZywgeT1GMTE0X21jcC5NT05UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImdyZWVuIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuUE1ULCBhZXMoeD1GMTE0X21jcC5QTVQkbG9uZywgeT1GMTE0X21jcC5QTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTUpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTM3X21jcC5FTVQsIGFlcyh4PUYxMzdfbWNwLkVNVCRsb25nLCB5PUYxMzdfbWNwLkVNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuRFJZVCwgYWVzKHg9RjEzN19tY3AuRFJZVCRsb25nLCB5PUYxMzdfbWNwLkRSWVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuTU9OVCwgYWVzKHg9RjEzN19tY3AuTU9OVCRsb25nLCB5PUYxMzdfbWNwLk1PTlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iZ3JlZW4iLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTM3X21jcC5QTVQsIGFlcyh4PUYxMzdfbWNwLlBNVCRsb25nLCB5PUYxMzdfbWNwLlBNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLkVNVCwgYWVzKHg9RjE0N19tY3AuRU1UJGxvbmcsIHk9RjE0N19tY3AuRU1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTQ3X21jcC5EUllULCBhZXMoeD1GMTQ3X21jcC5EUllUJGxvbmcsIHk9RjE0N19tY3AuRFJZVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJyZWQiLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTQ3X21jcC5NT05ULCBhZXMoeD1GMTQ3X21jcC5NT05UJGxvbmcsIHk9RjE0N19tY3AuTU9OVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJncmVlbiIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLlBNVCwgYWVzKHg9RjE0N19tY3AuUE1UJGxvbmcsIHk9RjE0N19tY3AuUE1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT01KSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1GMjUyX21jcC5FTVQsIGFlcyh4PUYyNTJfbWNwLkVNVCRsb25nLCB5PUYyNTJfbWNwLkVNVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0yKSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1GMjUyX21jcC5EUllULCBhZXMoeD1GMjUyX21jcC5EUllUJGxvbmcsIHk9RjI1Ml9tY3AuRFJZVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0zKSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1GMjUyX21jcC5NT05ULCBhZXMoeD1GMjUyX21jcC5NT05UJGxvbmcsIHk9RjI1Ml9tY3AuTU9OVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT00KSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1GMjUyX21jcC5QTVQsIGFlcyh4PUYyNTJfbWNwLlBNVCRsb25nLCB5PUYyNTJfbWNwLlBNVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT01KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC5FTVQsIGFlcyh4PUYzNl9tY3AuRU1UJGxvbmcsIHk9RjM2X21jcC5FTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuRFJZVCwgYWVzKHg9RjM2X21jcC5EUllUJGxvbmcsIHk9RjM2X21jcC5EUllUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuTU9OVCwgYWVzKHg9RjM2X21jcC5NT05UJGxvbmcsIHk9RjM2X21jcC5NT05UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImdyZWVuIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC5QTVQsIGFlcyh4PUYzNl9tY3AuUE1UJGxvbmcsIHk9RjM2X21jcC5QTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTUpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GNjZfbWNwLkVNVCwgYWVzKHg9RjY2X21jcC5FTVQkbG9uZywgeT1GNjZfbWNwLkVNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC5EUllULCBhZXMoeD1GNjZfbWNwLkRSWVQkbG9uZywgeT1GNjZfbWNwLkRSWVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC5NT05ULCBhZXMoeD1GNjZfbWNwLk1PTlQkbG9uZywgeT1GNjZfbWNwLk1PTlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iZ3JlZW4iLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GNjZfbWNwLlBNVCwgYWVzKHg9RjY2X21jcC5QTVQkbG9uZywgeT1GNjZfbWNwLlBNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NSkgKwogIHRoZW1lX2J3KCkgKwogIGxhYnMoeD0iRWFzdGluZyAobSkiLCB5PSJOb3J0aGluZyAobSkiKSArCiAgbGFicyhjYXB0aW9uID0gIkZpZ3VyZSAgfCAgU2Vhc29uYWwgaG9tZSByYW5nZSBzaGlmdHMgb2YgZml2ZSBsaXphcmRzLiBFbWVyZ2VuY2UgYW5kIHBvc3QtbW9uc29vbiByYW5nZXMgc3RheSByZWFsYXRpdmVseSB3aXRoaW4gXG4gZWFjaCBvdGhlci4gQWxsIHNlYXNvbmFsIHBvbHlnb25zIHN0YXkgcmVsYXRpdmVseSBzdGFibGUgd2l0aG91dCBhbnkgbWFqb3Igc2hpZnRzIGF3YXkgZnJvbSBvdGhlciBzZWFzb25hbCByYW5nZXMuIikrCiAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCxsaW5laGVpZ2h0ID0gMC45KSkrCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIiwgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBoanVzdCA9IDAuNSkpCgptY3Auc2hpZnQuVEVTVDUKYGBgCgoKCgoKCgpTZWFzb25hbCBob21lIHJhbmdlcyBhdCBTdG9uZSBDYW55b24gdmFyaWVkIGluIHNpemUgYmV0d2VlbiBzZWFzb25zIGJ1dCBkaWQgbm90IHNlZW0gc2hpZnQgKEZpZy5fX18pLCB3aXRoIHNlYXNvbmFsIGhvbWUgcmFuZ2VzIG92ZXJsYXBwaW5nIGVhY2ggb3RoZXIsIG9ubHkgZXhwYW5kaW5nIG9yIGNvbGxhcHNpbmcgYmV0d2VlbiBzZWFzb25zLiBIb21lIHJhbmdlIHBhdHRlcm5zIGF0IFN0b25lIENhbnlvbiBkaWQgbm90IGRpc3BsYXkgdGhlIHNhbWUgc2Vhc29uYWwgdmFyaWF0aW9uIGluIGhvbWUgcmFuZ2Ugc2l6ZXMgdGhhdCB3YXMgb2JzZXJ2ZWQgYXQgT3dsIEhlYWQgQnV0dGVzLiBBdCBTdG9uZSBDYW55b24sIEdpbGEgTW9uc3RlcnMgaGFkIHJlbGF0aXZlbHkgc21hbGxlciBob21lIHJhbmdlcyB0aHJvdWdob3V0IHRoZSB5ZWFyLCB3aGVyZSB0aGUgaGlnaGVzdCBpbmZsYXRpb24gb2YgcmFuZ2Ugc2l6ZSB3YXMgb2JzZXJ2ZWQgZHVyaW5nIHRoZSBkcnkgc2Vhc29uIGZyb20gYW4gaW5jcmVhc2UgaW4gbWFsZSBob21lIHJhbmdlcywgMTguMiDCsSA1LjQgUy5FLiBoYSB0byB0aGF0IG9mIGZlbWFsZSBob21lIHJhbmdlIHNpemVzIGF0IDEwLjEgwrEgMi40IFMuRS4gaGEuIEZlbWFsZXMgYXQgU3RvbmUgQ2FueW9uIGRpc3BsYXllZCBzaW1pbGFyIGhvbWUgcmFuZ2VzIGR1cmluZyB0aGUgbW9uc29vbiBzZWFzb24sIDEwLjYgwrEgMi41IFMuRS4gaGEuIEhvbWUgcmFuZ2Ugc2l6ZXMgYXQgT3dsIEhlYWQgQnV0dGVzIGhhZCBhIG11Y2ggbGFyZ2VyIGFtb3VudCBvZiB2YXJpYXRpb24gYWNyb3NzIHNlYXNvbnMgdGhhbiBkaWQgdGhvc2UgYXQgU3RvbmUgQ2FueW9uLiBUaGVyZSB3ZXJlIHN0aWxsIHNsaWdodGx5IGxhcmdlciByYW5nZXMgb2JzZXJ2ZWQgZHVyaW5nIHRoZSBkcnkgc2Vhc29uLCBwcmltYXJpbHkgZHVlIHRvIGluY3JlYXNlZCBob21lIHJhbmdlIHNpemVzIGV4aGliaXRlZCBieSBtYWxlcyAyOS40IMKxIDQuNyBTLkUuIGhhIHZlcnN1cyBmZW1hbGVzIGF0IDE1LjYgwrEgMy44IFMuRS4gaGEuIER1cmluZyB0aGUgbW9uc29vbiBzZWFzb24sIHRoZXJlIHdhcyBzdGlsbCB5ZXQgYSBsYXJnZSBpbmZsdXggb2YgaG9tZSByYW5nZXMgc2l6ZXMgd2hlcmUgZmVtYWxlIGhvbWUgcmFuZ2VzIGluY3JlYXNlZCB0byAyMi45IMKxIDQuMCBTLkUuIGhhLiAgRm9yIGJvdGggcG9wdWxhdGlvbnMsIGhvbWUgcmFuZ2VzIGR1cmluZyB0aGUgZW1lcmdlbmNlIGFuZCBwb3N0LW1vbnNvb24gc2Vhc29ucyB3ZXJlIHNtYWxsLCBtYXJraW5nIHRoZSBiZWdpbm5pbmcgYW5kIGVuZGluZyBvZiBvdmVyd2ludGVyaW5nIHBlcmlvZHMsIHdoZXJlIG1pbmltYWwgbW92ZW1lbnQgaXMgb2JzZXJ2ZWQgaW4gYm90aCBncm91cHMuIAogIApBbmFseXNpcyBpbmRpY2F0ZWQgdGhhdCB0aGVyZSB3YXMgYW4gZWZmZWN0IG9mIHNlYXNvbiAoZGYgPSAzLCBGID0gMTUuNDEsIFAgPSA8MC4wMDEpIGFzIHdlbGwgYXMgYW4gaW50ZXJhY3Rpb24gb2YgZW52aXJvbm1lbnQgYW5kIHNlYXNvbiAoZGYgPSAzLCBGID0gNi44NCwgUCA9IDwwLjAwMSksIGluZGljYXRpbmcgdGhhdCBjaGFuZ2VzIGluIHNlYXNvbmFsIGhvbWUgcmFuZ2VzIHNpemVzIHZhcmllZCBiZXR3ZWVuIGVhY2ggZW52aXJvbm1lbnQuIFBvc3QtSG9jIGFuYWx5c2VzIG9uIHRoZSBTdG9uZSBDYW55b24gZGF0YSBzZXQgd2l0aCBob21lIHJhbmdlIG1lYW5zIGF2ZXJhZ2VkIGFjcm9zcyBzZXgsIHN1Z2dlc3RlZCB0aGF0IHRoZXJlIHdhcyBubyBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGluIGhvbWUgcmFuZ2VzIGJldHdlZW4gdGhlIGVtZXJnZW5jZSAoNC4zMiDCsSAyLjU1IFMuRS4gaGEpIGFuZCBwb3N0LW1vbnNvb24gc2Vhc29ucyAoNS4wOSDCsSAyLjA3IFMuRS4gaGEpIG5vciBkcnkgYW5kIG1vbnNvb24gKDEyLjIzIMKxIDEuNzQgUy5FLiBoYSBhbmQgOS4wNCDCsSAxLjc4IFMuRS4gaGEpLiBUaGVyZSB3YXMgYWxzbyBubyBzaWduaWZpY2FuY2UgYmV0d2VlbiBlbWVyZ2VuY2UgYW5kIGRyeS9tb25zb29uIHNlYXNvbnMsIGJ1dCB0aGVyZSB3YXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gZHJ5IGFuZCBwb3N0LW1vbnNvb24gKGRmID0gODAuMiwgUCA9IDAuMDQpLiBQb3N0LUhvYyBhbmFseXNlcyBvbiB0aGUgT3dsIEhlYWQgQnV0dGVzIHBvcHVsYXRpb24gaW5kaWNhdGVkIHRoYXQgdGhlcmUgd2FzIG5vIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgYmV0d2VlbiBlbWVyZ2VuY2UgKDMuMzMgwrEgMi4yNCBTLkUuIGhhKSBhbmQgcG9zdC1tb25zb29uICgyLjM2IMKxIDIuMzYgUy5FLikgbm9yIGRyeSBhbmQgbW9uc29vbiAoMTguODYgwrEgMi4yNSBTLkUuIGhhIGFuZCAyMS44NSDCsSAyLjAzIFMuRS4gaGEpIHJlZmxlY3RpbmcgdGhlIHNhbWUgcGF0dGVybiBhdCBTdG9uZSBDYW55b24uIEhvd2V2ZXIsIHRoZXJlIHdhcyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgYmV0d2VlbiBlbWVyZ2VuY2UgYW5kIGRyeS9tb25zb29uIChkZiA9IDY5LjQsIFAgPSA8MC4wMDAxLCBhbmQgZGYgPSA2OCwgUCA9IDwwLjAwMDEgcmVzcGVjdGl2ZWx5KSwgYXMgd2VsbCBhcyBwb3N0LW1vbnNvb24gYW5kIGRyeS9tb25zb29uIChkZiA9IDc4LjksIFAgPSA8MC4wMDAxLCBhbmQgZGYgPSA3NCwgUCA9IDwwLjAwMDEpLiBUaGlzIHNob3dzIGEgcmF0aGVyIGRpZmZlcmVudCBwYXR0ZXJuIHRoYW4gc2VlbiBhdCBTdG9uZSBDYW55b24uIFBhaXJ3aXNlIGFuYWx5c2VzIGJldHdlZW4gdGhlIHR3byBwb3B1bGF0aW9ucyBpbmRpY2F0ZWQgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIGVtZXJnZW5jZSAoZGYgPSA4Ny43LCBQID0gMC43Nikgb3IgcG9zdC1tb25zb29uIChkZiA9IDg5LjQsIFAgPSAwLjM1KS4gRGlmZmVyZW5jZXMgaW4gaG9tZSByYW5nZSBzaXplcyBiZXR3ZWVuIHRoZSB0d28gcG9wdWxhdGlvbnMgd2VyZSBiZXR3ZWVuIHRoZSBkcnkgYW5kIG1vbnNvb24gc2Vhc29ucyAoRmlnLl9fXykuICBPd2wgSGVhZCBob21lIHJhbmdlcyB3ZXJlIDU4JSBsYXJnZXIgdGhhbiB0aG9zZSBhdCBTdG9uZSBDYW55b24gZHVyaW5nIHRoZSBkcnkgc2Vhc29uLCBhbmQgNzYlIGxhcmdlciBkdXJpbmcgdGhlIG1vbnNvb24gc2Vhc29uLiAKICAKCgoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpzZWFzb25hbDwtcmVhZC5jc3YoIlNDX1NlYXNvbmFsX0RhdGEuY3N2IikKCmxpYnJhcnkoUm1pc2MpCgpTRUFTX0dSUF9NZWFucyA8LSBzdW1tYXJ5U0Uoc2Vhc29uYWwsIG1lYXN1cmV2YXI9IkhvbWVfUmFuZ2VfMTAwbWNwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwdmFycz1jKCJFbnZpcm9ubWVudCIsIlNlYXNvbiIpLCBuYS5ybSA9IFRSVUUpCgojIFNFQVNfR1JQX01lYW5zCmthYmxlKFNFQVNfR1JQX01lYW5zLCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdUYWJsZSA1IHwgR3JvdXAgbWVhbnMgb2Ygc2Vhc29uYWwgaG9tZSByYW5nZXMgYmV0d2VlbiBTdG9uZSBDYW55b24gKHN1YnNpZGl6ZWQpIGFuZCBPd2wgSGVhZCBCdXR0ZXMgKG5vbi1zdWJzaWRpemVkKS4gVGhlc2UgbWVhbnMgYXJlIGF2ZXJhZ2VkIGFjcm9zcyBzZXguJykKYGBgCgoKCgoKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkocmVhZHIpCmxpYnJhcnkobG1lclRlc3QpCiMgc2Vhc29uYWw8LXJlYWQuY3N2KCJTQ19TZWFzb25hbF9EYXRhLmNzdiIpCgpSTS5tb2QuU2Vhc29uIDwtIGxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+RW52aXJvbm1lbnQrU2Vhc29uK1NleCtOK0Vudmlyb25tZW50KlNlYXNvbisoMXxHaWxhKSwgCiAgICAgICAgICAgICAgICAgICAgICBkYXRhPXNlYXNvbmFsKQpzdW1tYXJ5KFJNLm1vZC5TZWFzb24pCgojIGFub3ZhKFJNLm1vZC5TZWFzb24pCgojICMgbWFyZ2luYWwuc2Vhc29uIDwtIGxzbWVhbnMoUk0ubW9kLlNlYXNvbiwgCiMgIyAgICAgICAgICAgICAgICAgICAgfiBFbnZpcm9ubWVudCkKIyAjIG1hcmdpbmFsLnNlYXNvbgpgYGAKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQphbm92YShSTS5tb2QuU2Vhc29uKQpgYGAKCgoKCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9ClNFQVNfR1JQX1RFU1QgPC0gc3VtbWFyeVNFKHNlYXNvbmFsLCBtZWFzdXJldmFyPSJIb21lX1JhbmdlXzEwMG1jcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwdmFycz1jKCJFbnZpcm9ubWVudCIsIlNlYXNvbiIsIlNleCIpLCBuYS5ybSA9IFRSVUUpCgojIFNFQVNfR1JQX01lYW5zCmthYmxlKFNFQVNfR1JQX1RFU1QsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1RhYmxlIDYgfCBTZWFzb25hbCBob21lIHJhbmdlIG1lYW5zIGJldHdlZW4gU3RvbmUgQ2FueW9uIChzdWJzaWRpemVkKSBhbmQgT3dsIEhlYWQgQnV0dGVzIChub24tc3Vic2lkaXplZCkgcG9wdWF0aW9ucyBmb3IgbWFsZXMgYW5kIGZlbWFsZXMuIFRoZXNlIGFyZSByYXcgbWVhbnMgYmVmb3JlIGJlaW5nIGFkanVzdGVkIGZvciBlbnZpcm9ubWVudCwgc2Vhc29uLCBzZXgsIGFuZCBzYW1wbGUgc2l6ZS4nKQpgYGAKCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CgpwZCA8LSBwb3NpdGlvbl9kb2RnZSgwLjMpICMgbW92ZSB0aGVtIC4wNSB0byB0aGUgbGVmdCBhbmQgcmlnaHQgKCdkb2RnZXMnKQoKIyMgVEVTVCAzCnJhdy5zZWFzb25hbDwtZ2dwbG90KFNFQVNfR1JQX1RFU1QsYWVzKHg9RW52aXJvbm1lbnQsIHk9SG9tZV9SYW5nZV8xMDBtY3AsIHNoYXBlPVNleCkpICsgCiAgZ2VvbV9wb2ludChhZXMoc2hhcGU9U2V4KSwgc2l6ZSA9IDIsIHBvc2l0aW9uPXBkKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1Ib21lX1JhbmdlXzEwMG1jcC1zZSwgeW1heD1Ib21lX1JhbmdlXzEwMG1jcCtzZSksIHBvc2l0aW9uID0gcGQsCiAgICAgICAgICAgICAgICB3aWR0aD0wLjMsIHNpemU9MC41LCBsdHk9MSkgKyAKICAjIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzID0gYygnYmxhY2snLCdyZWQnKSkgKwogIGZhY2V0X2dyaWQoflNlYXNvbikgKwogICMgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoOCwxOSkpKwogIGxhYnMoY2FwdGlvbiA9ICJGaWd1cmUgIHwgIFJhdyBzZWFzb25hbCBtZWFucyBvZiBzZXhlcyBiZXR3ZWVuIGVhY2ggZW52aXJvbm1lbnQuIEhvbWUgcmFuZ2VzIG9mIHRoZSBzdWJzaWRlemVkIHBvcHVsYXRpb24gcmVtYWluIFxuIHJlbGF0aXZlbHkgc21hbGwgdGhyb3VnaG91dCB0aGUgc2Vhc29ucywgd2l0aCB0aGUgZXhjZXB0aW9uIGR1cmluZyB0aGUgZHJ5IHNlYXNvbiB3aGVyZSB3ZSBvYnNlcnZlIGluY3JlYXNlZCBtYWxlIFxuIGhvbWUgcmFuZ2VzLiBUaGUgbm9uLXN1YnNpZGl6ZWQgcG9wdWxhdGlvbiBleGhpYml0cyBhIGxhcmdlIGFtb3VudCBvZiB2YXJpYXRpb24gYWNyb3NzIHNlYXNvbnMuIikrCiAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCxsaW5laGVpZ2h0ID0gMC45KSkrCiAgIyBzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cz1jKCdFbWVyZ2VuY2UnLCdEcnknLCdNb25zb29uJywnUG9zdF9Nb25zb29uJykpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSBjKC44NywuODUpLCBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siKSwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGxpbmVoZWlnaHQ9MS41LCBmYWNlPSJib2xkIiwgc2l6ZT1yZWwoMS41KSwgaGp1c3QgPSAwLjUpLAogICAgICAgIGF4aXMudGV4dC54ICA9IGVsZW1lbnRfdGV4dCh2anVzdD0wLjUsIHNpemU9OCksCiAgICAgICAgYXhpcy50ZXh0LnkgID0gZWxlbWVudF90ZXh0KHZqdXN0PTAuNSwgc2l6ZT04KSwKICAgICAgICBheGlzLnRpdGxlLnkgID0gZWxlbWVudF90ZXh0KHNpemU9MTApLAogICAgICAgIGF4aXMudGl0bGUueCAgPSBlbGVtZW50X3RleHQoc2l6ZT0xMCksCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwKICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemU9MTIpKSArCiAgeGxhYigiRW52aXJvbm1lbnQiKSArIHlsYWIoIkFyZWEgKGhhKSB1c2luZyAxMDAlIE1DUCIpCnJhdy5zZWFzb25hbApgYGAKCgoKCgpBZGp1c3RlZCBTZWFzb25hbCBNZWFucwpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIFJhdyBzZWFzb25hbCBtZWFucwojIHBkIDwtIHBvc2l0aW9uX2RvZGdlKDAuMykgIyBtb3ZlIHRoZW0gLjA1IHRvIHRoZSBsZWZ0IGFuZCByaWdodCAoJ2RvZGdlcycpCiMgCiMjIFRFU1QgMwojIHJhdy5zZWFzb25hbDwtZ2dwbG90KFNFQVNfR1JQX1RFU1QsYWVzKHg9RW52aXJvbm1lbnQsIHk9SG9tZV9SYW5nZV8xMDBtY3AsIHNoYXBlPVNleCkpICsKIyAgIGdlb21fcG9pbnQoYWVzKHNoYXBlPVNleCksIHNpemUgPSAyLCBwb3NpdGlvbj1wZCkgKwojICAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1Ib21lX1JhbmdlXzEwMG1jcC1zZSwgeW1heD1Ib21lX1JhbmdlXzEwMG1jcCtzZSksIHBvc2l0aW9uID0gcGQsCiMgICAgICAgICAgICAgICAgIHdpZHRoPTAuMywgc2l6ZT0wLjUsIGx0eT0xKSArCiMgICAjIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzID0gYygnYmxhY2snLCdyZWQnKSkgKwojICAgZmFjZXRfZ3JpZCh+U2Vhc29uKSArCiMgICAjICMgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoOCwxOSkpKwojICAgIyBsYWJzKGNhcHRpb24gPSAiRmlndXJlICB8ICBSYXcgc2Vhc29uYWwgbWVhbnMgb2Ygc2V4ZXMgYmV0d2VlbiBlYWNoIGVudmlyb25tZW50LiBIb21lIHJhbmdlcyBvZiB0aGUgc3Vic2lkZXplZCBwb3B1bGF0aW9uIHJlbWFpbiBcbiByZWxhdGl2ZWx5IHNtYWxsIHRocm91Z2hvdXQgdGhlIHNlYXNvbnMsIHdpdGggdGhlIGV4Y2VwdGlvbiBkdXJpbmcgdGhlIGRyeSBzZWFzb24gd2hlcmUgd2Ugb2JzZXJ2ZSBpbmNyZWFzZWQgbWFsZSBcbiBob21lIHJhbmdlcy4gVGhlIG5vbi1zdWJzaWRpemVkIHBvcHVsYXRpb24gZXhoaWJpdHMgYSBsYXJnZSBhbW91bnQgb2YgdmFyaWF0aW9uIGFjcm9zcyBzZWFzb25zLiIpKwojICAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCxsaW5laGVpZ2h0ID0gMC45KSkrCiMgICAjIHNjYWxlX3hfZGlzY3JldGUobGltaXRzPWMoJ0VtZXJnZW5jZScsJ0RyeScsJ01vbnNvb24nLCdQb3N0X01vbnNvb24nKSkgKwojICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gYyguODcsLjg1KSwgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIiksCiMgICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGxpbmVoZWlnaHQ9MS41LCBmYWNlPSJib2xkIiwgc2l6ZT1yZWwoMS41KSwgaGp1c3QgPSAwLjUpLAojICAgICAgICAgYXhpcy50ZXh0LnggID0gZWxlbWVudF90ZXh0KHZqdXN0PTAuNSwgc2l6ZT04KSwKIyAgICAgICAgIGF4aXMudGV4dC55ICA9IGVsZW1lbnRfdGV4dCh2anVzdD0wLjUsIHNpemU9OCksCiMgICAgICAgICBheGlzLnRpdGxlLnkgID0gZWxlbWVudF90ZXh0KHNpemU9MTApLAojICAgICAgICAgYXhpcy50aXRsZS54ICA9IGVsZW1lbnRfdGV4dChzaXplPTEwKSwKIyAgICAgICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksCiMgICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemU9MTIpKSArCiMgICB4bGFiKCIiKSArIHlsYWIoIiIpCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgQWp1c3RlZCBzZWFzb25hbCBtZWFucwpSTS5tb2QuU2Vhc29uIDwtIGxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+RW52aXJvbm1lbnQrU2Vhc29uK1NleCtOK0Vudmlyb25tZW50KlNlYXNvbisoMXxHaWxhKSwKICAgICAgICAgICAgICAgICAgICAgIGRhdGE9c2Vhc29uYWwpCgojIFJNLm1hcmdpbmFsIDwtIGxzbWVhbnMoUk0ubW9kLlNlYXNvbiwgCiMgICAgICAgICAgICAgICAgICAgICB+IEVudmlyb25tZW50KQojIFJNLm1hcmdpbmFsCgojIyBDQVRBR09SSVpFIExTTSBHUkFQSCBCWSBTRVggQkVUV0VFTiBFTlZJUk9OTUVOVDoKcmVmUk1fc2Vhc29uIDwtIGxzbWVhbnMoUk0ubW9kLlNlYXNvbiwgc3BlY3MgPSBjKCJFbnZpcm9ubWVudCIsIlNlYXNvbiIsIlNleCIpKQoKIyByZWZSTV9zZXgKcmVmX2RmUk1fc2Vhc29uIDwtIGFzLmRhdGEuZnJhbWUoc3VtbWFyeShyZWZSTV9zZWFzb24pKQpwZF9STSA8LSBwb3NpdGlvbl9kb2RnZSgwLjIpCgphZGouc2Vhc29uYWw8LWdncGxvdChyZWZfZGZSTV9zZWFzb24sYWVzKHg9RW52aXJvbm1lbnQsIHk9bHNtZWFuLCBzaGFwZT1TZXgpKSArIAogIGdlb21fcG9pbnQoYWVzKHNoYXBlPVNleCksIHNpemUgPSAyLCBwb3NpdGlvbj1wZCwgc2hvdy5sZWdlbmQ9VFJVRSkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49bHNtZWFuLVNFLCB5bWF4PWxzbWVhbitTRSksIHBvc2l0aW9uID0gcGQsCiAgICAgICAgICAgICAgICB3aWR0aD0wLjMsIHNpemU9MC41LCBsdHk9MSkgKyAKICBmYWNldF9ncmlkKH5TZWFzb24pICsKbGFicyhjYXB0aW9uID0gIkZpZ3VyZSAgfCBBZGp1c3RlZCBzZWFzb25hbCBob21lIHJhbmdlIG1lYW5zIG9mIHNleGVzIGJldHdlZW4gZW52aXJvbm1lbnRzLiBIb21lIHJhbmdlcyBvZiB0aGUgc3Vic2lkZXplZCBcbiBwb3B1bGF0aW9uIHJlbWFpbiByZWxhdGl2ZWx5IHNtYWxsIHRocm91Z2hvdXQgdGhlIHNlYXNvbnMuIEFmdGVyIGFkanVzdG1lbnQgbWFsZSBob21lIHJlYW5nZXMgd2VyZSByZWR1Y2VkLCBcbiBidXQgc3RpbGwgcmVtYWluZWQgc2xpZ2h0bHkgbGFyZ2VyIHRoZW4gZmVtYWxlcy4iKSsKICB0aGVtZShwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLGxpbmVoZWlnaHQgPSAwLjkpKSsKICAjIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDgsMTkpKSsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSBjKC44NywuODUpLCBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siKSwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGxpbmVoZWlnaHQ9MS41LCBmYWNlPSJib2xkIiwgc2l6ZT1yZWwoMS41KSwgaGp1c3QgPSAwLjUpLAogICAgICAgIGF4aXMudGV4dC54ICA9IGVsZW1lbnRfdGV4dCh2anVzdD0wLjUsIHNpemU9OCksCiAgICAgICAgYXhpcy50ZXh0LnkgID0gZWxlbWVudF90ZXh0KHZqdXN0PTAuNSwgc2l6ZT04KSwKICAgICAgICBheGlzLnRpdGxlLnkgID0gZWxlbWVudF90ZXh0KHNpemU9MTApLAogICAgICAgIGF4aXMudGl0bGUueCAgPSBlbGVtZW50X3RleHQoc2l6ZT0xMCksCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwKICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemU9MTIpKSArCiAgeGxhYigiRW52aXJvbm1lbnQiKSArIHlsYWIoIkFyZWEgKGhhKSB1c2luZyAxMDAlIE1DUCIpCmFkai5zZWFzb25hbAoKIyBDb21iaW5lIHJhdyBhbmQgYWRqdXN0ZWQgc2Vhc29uYWwgaG9tZSByYW5nZXMgd2l0aCBhIHNpbmdsZSBjYXB0aW9uOgojIGdyaWQuYXJyYW5nZShyYXcuc2Vhc29uYWwsIGFkai5zZWFzb25hbCwgbnJvdyA9IDIsaGVpZ2h0cz11bml0KGMoMiwyKSwgYygiaW4iLCAiaW4iKSksCiMgICAgICAgICAgICAgIGJvdHRvbSA9IHRleHRHcm9iKCIiLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncCA9IGdwYXIoZm9udGZhY2UgPSAxLGZvbnRzaXplID0gMTApLGhqdXN0ID0gMCwgeCA9IDApKQoKIyBsaWJyYXJ5KGd0YWJsZSkKIyBnMiA8LSBnZ3Bsb3RHcm9iKHJhdy5zZWFzb25hbCkKIyBnMyA8LSBnZ3Bsb3RHcm9iKGFkai5zZWFzb25hbCkKIyBnIDwtIHJiaW5kKGcyLCBnMywgc2l6ZSA9ICJmaXJzdCIpCiMgZyR3aWR0aHMgPC0gdW5pdC5wbWF4KGcyJHdpZHRocywgZzMkd2lkdGhzKQojIGdyaWQubmV3cGFnZSgpCiMgZ3JpZC5kcmF3KGcpCgpgYGAKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgClBvc3QtSG9jIGNvbXBhcmlzb25zIGJldHdlZW4gcG9wdWxhdGlvbnMgZm9yIHNlYXNvbmFsIGhvbWUgcmFuZ2UgYW5hbHlzaXM6CgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KZW1tX3MudCA8LSBlbW1lYW5zKFJNLm1vZC5TZWFzb24sIHBhaXJ3aXNlIH4gRW52aXJvbm1lbnQgfCBTZWFzb24pCmVtbV9zLnQKYGBgCgoKR3JhcGhpY2FsIENvbXBhcmlzb25zIG9mIHNlYXNvbnMgYmV0d2VlbiB0aGUgdHdvIHBvcHVsYXRpbnM6CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIHBsb3QoU2V4LmVtbS5zZWFzLCBjb21wYXJpc29ucyA9IFRSVUUpCnBsb3QoZW1tX3MudCwgY29tcGFyaXNvbnMgPSBUUlVFKQpgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKRmlndXJlIDExIHwgUGFpcndpc2UgY29tcGFyaXNvbnMgb2YgZWFjaCBzZWFzb24gYmV0d2VlbiBlbnZpcm9ubWVudHMuIE92ZXJsYXBwaW5nIHJlZCBiYXJzIGluZGljYXRlIG5vIHN0YXRpc3RpY2FsIGRpZmZlcmVuY2UuIAoKCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMgU2Vhcy5NZWFuc1Q8LWVtbWVhbnMoUk0ubW9kLlNlYXNvbiwgbGlzdChwYWlyd2lzZSB+IEVudmlyb25tZW50LCBwYWlyd2lzZSB+IFNlYXNvbikpCiMgU2Vhcy5NZWFuc1QKCmVtbV9zLnQ0IDwtIGVtbWVhbnMoUk0ubW9kLlNlYXNvbiwgcGFpcndpc2UgfiBTZWFzb24gfCBFbnZpcm9ubWVudCkKZW1tX3MudDQKYGBgCgoKR3JhcGhpY2FsIENvbXBhcmlzb25zIGJldHdlZW4gc2Vhc29ucyB3aXRoaW4gdGhlIHR3byBwb3B1bGF0aW9uczoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CnBsb3QoZW1tX3MudDQsIGNvbXBhcmlzb25zID0gVFJVRSkKYGBgCkZpZ3VyZSAxMiB8IFBhaXJ3aXNlIGNvbXBhcmlzb25zIGJldHdlZW4gc2Vhc29ucyB3aXRoaW4gZWFjaCBlbnZpcm9ubWVudCBhZ2FpbnN0IGVzdGltYXRlZCBtYXJnaW5hbCBtZWFucy4gT3ZlcmxhcHBpbmcgcmVkIGJhcnMgaW5kaWNhdGUgbm8gc3RhdGlzdGljYWwgZGlmZmVyZW5jZS4gCgoKCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpzdWIgPC0gc3Vic2V0KHNlYXNvbmFsLCBFbnZpcm9ubWVudCA9PSAic3Vic2lkaXplZCIpCgpSTS5tb2QuU3ViIDwtIGxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+U2Vhc29uK1NleCtOK1NlYXNvbipTZXgrKDF8R2lsYSksIGRhdGE9c3ViKQoKZW1tX3MudDUgPC0gZW1tZWFucyhSTS5tb2QuU3ViLCBwYWlyd2lzZSB+IFNleCB8IFNlYXNvbikKZW1tX3MudDUgCmBgYAoKR3JhcGhpY2FsIENvbXBhcmlzb25zIGJldHdlZW4gc2V4IHdpdGhpbiB0aGUgc3Vic2lkaXplZCBwb3B1bGF0aW9uOgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KcGxvdChlbW1fcy50NSwgY29tcGFyaXNvbnMgPSBUUlVFKQpgYGAgICAKICAgCiAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKVGFibGUgNyB8IE1lYW4gaW5kaXZpZHVhbCBzZWFzb25hbCBob21lIHJhbmdlcyBwb29sZWQgZnJvbSB0aGUgZW50aXJlIHN0dWR5IHBlcmlvZC4gTWlzc2luZyB2YWx1ZXMgYXJlIGRlcGljdGVkIHdoZXJlIG5vIGxvY2F0aW9ucyBmb3IgdGhhdCBhbmltYWwgZHVyaW5nIHRoYXQgcGVyaW9kIHdlcmUgc3VjY2Vzc2Z1bGwuCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9ClNlYXMuSW5kLk1lYW5zPC1yZWFkLmNzdigiU2Vhc29uYWwgSFIgVGFibGUuY3N2IikKa2FibGUoU2Vhcy5JbmQuTWVhbnMsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1NlYXNvbmFsIEluZGl2aWR1YWwgSG9tZSBSYW5nZXMgKE1DUCkuJykKYGBgCgoKCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9Cm5vbnN1YiA8LSBzdWJzZXQoc2Vhc29uYWwsIEVudmlyb25tZW50ID09ICJub25zdWJzaWRpemVkIikKClJNLm1vZC5OU3ViIDwtIGxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+U2Vhc29uK1NleCtOK1NlYXNvbipTZXgrKDF8R2lsYSksIGRhdGE9bm9uc3ViKQoKZW1tX3MudDYgPC0gZW1tZWFucyhSTS5tb2QuTlN1YiwgcGFpcndpc2UgfiBTZXggfCBTZWFzb24pCmVtbV9zLnQ2IApgYGAKCkdyYXBoaWNhbCBDb21wYXJpc29ucyBiZXR3ZWVuIHNleCB3aXRoaW4gdGhlIG5vbi1zdWJzaWRpemVkIHBvcHVsYXRpb246CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpwbG90KGVtbV9zLnQ2LCBjb21wYXJpc29ucyA9IFRSVUUpCmBgYCAgIAoKCgoKCiMjIFNlYXNvbmFsIEhvbWUgUmFuZ2UgKEtERSkKCgpUYWJsZSAgfCBSYXcgS0RFIGdyb3VwIG1lYW5zIG9mIHNlYXNvbmFsIGhvbWUgcmFuZ2VzIGJldHdlZW4gc2V4ZXMgYXQgU3RvbmUgQ2FueW9uIChzdWJzaWRpemVkKS4KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CnNlYXNvbi5rZGU8LXJlYWQuY3N2KCJTQ19TZWFzb25hbF9JbnB1dC5jc3YiKQoKU0VBU19LREVfU2V4IDwtIHN1bW1hcnlTRShzZWFzb24ua2RlLCBtZWFzdXJldmFyPSJIb21lX1JhbmdlXzk1a2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwdmFycz1jKCJTZWFzb24iLCJTZXgiKSwgbmEucm0gPSBUUlVFKQoKIyBTRUFTX0dSUF9NZWFucwprYWJsZShTRUFTX0tERV9TZXgsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1JhdyBLREUgR3JvdXAgTWVhbnMgb2YgU2Vhc29uYWwgSG9tZSBSYW5nZXMgYmV0d2VlbiBzZXhlcycpCmBgYAoKIApgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KU0VBU19LREVfTWVhbnMgPC0gc3VtbWFyeVNFKHNlYXNvbi5rZGUsIG1lYXN1cmV2YXI9IkhvbWVfUmFuZ2VfOTVrZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXB2YXJzPWMoIlNlYXNvbiIpLCBuYS5ybSA9IFRSVUUpCgojIFNFQVNfR1JQX01lYW5zCmthYmxlKFNFQVNfS0RFX01lYW5zLCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdSYXcgS0RFIEdyb3VwIE1lYW5zIG9mIFNlYXNvbmFsIEhvbWUgUmFuZ2VzJykKYGBgCiAKIAoKCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KIyBzZWFzb25hbDwtcmVhZC5jc3YoIlNDX1NlYXNvbmFsX0RhdGEuY3N2IikKClJNLktERS5TZWFzb24gPC0gbG1lcihIb21lX1JhbmdlXzk1a2RlflNlYXNvbitTZXgrTitTZWFzb24qU2V4KygxfEdpbGEpLCAKICAgICAgICAgICAgICAgICAgICAgIGRhdGE9c2Vhc29uLmtkZSkKc3VtbWFyeShSTS5LREUuU2Vhc29uKQpgYGAKIApBTk9WQSBUYWJsZS4gU2Vhc29uYWwgS0RFCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQphbm92YShSTS5LREUuU2Vhc29uKQpgYGAKCiAKClJhdyBTZWFzb25hbCBLREUgTWVhbnMKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmdncGxvdChTRUFTX0tERV9TZXgsYWVzKHg9U2V4LCB5PUhvbWVfUmFuZ2VfOTVrZGUpKSArIAogIGdlb21fcG9pbnQoc2l6ZSA9IDIsIHBvc2l0aW9uPXBkKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1Ib21lX1JhbmdlXzk1a2RlLXNlLCB5bWF4PUhvbWVfUmFuZ2VfOTVrZGUrc2UpLCBwb3NpdGlvbiA9IHBkLAogICAgICAgICAgICAgICAgd2lkdGg9MC4zLCBzaXplPTAuNSwgbHR5PTEpICsgCiAgZmFjZXRfZ3JpZCh+U2Vhc29uKSArCiAgdGhlbWVfYncoKSArCiAgeGxhYigiU2V4IikgKyB5bGFiKCJBcmVhIChoYSkgdXNpbmcgOTUlIEtERSIpCmBgYAoKCgoKCkFkanVzdGVkIFNlYXNvbmFsIEtERSBNZWFucwpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KUk0uS0RFLlNlYXNvbiA8LSBsbWVyKEhvbWVfUmFuZ2VfOTVrZGV+U2Vhc29uK1NleCtOK1NlYXNvbipTZXgrKDF8R2lsYSksIAogICAgICAgICAgICAgICAgICAgICAgZGF0YT1zZWFzb24ua2RlKQoKIyBSTS5tYXJnaW5hbCA8LSBsc21lYW5zKFJNLm1vZC5TZWFzb24sIAojICAgICAgICAgICAgICAgICAgICAgfiBFbnZpcm9ubWVudCkKIyBSTS5tYXJnaW5hbAoKIyMgQ0FUQUdPUklaRSBMU00gR1JBUEggQlkgU0VYIEJFVFdFRU4gRU5WSVJPTk1FTlQ6CnJlZlJNX0tERSA8LSBsc21lYW5zKFJNLktERS5TZWFzb24sIHNwZWNzID0gYygiU2Vhc29uIiwiU2V4IikpCgojIHJlZlJNX3NleApyZWZfZGZSTV9LREUgPC0gYXMuZGF0YS5mcmFtZShzdW1tYXJ5KHJlZlJNX0tERSkpCnBkX1JNIDwtIHBvc2l0aW9uX2RvZGdlKDAuMikKCmdncGxvdChyZWZfZGZSTV9LREUsYWVzKHg9U2V4LCB5PWxzbWVhbikpICsgCiAgZ2VvbV9wb2ludChzaXplID0gMiwgcG9zaXRpb249cGQpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPWxzbWVhbi1TRSwgeW1heD1sc21lYW4rU0UpLCBwb3NpdGlvbiA9IHBkLAogICAgICAgICAgICAgICAgd2lkdGg9MC4zLCBzaXplPTAuNSwgbHR5PTEpICsgCiAgZmFjZXRfZ3JpZCh+U2Vhc29uKSArCiAgeGxhYigiU2V4IikgKyB5bGFiKCJBcmVhIChoYSkgdXNpbmcgOTUlIEtERSIpCmBgYAoKIAoKCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmVtbV9zZXhfS0RFIDwtIGVtbWVhbnMoUk0uS0RFLlNlYXNvbiwgcGFpcndpc2UgfiBTZXggfCBTZWFzb24pCmVtbV9zZXhfS0RFIApgYGAKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpwbG90KGVtbV9zZXhfS0RFLCBjb21wYXJpc29ucz1UUlVFKQpgYGAKCgoKCgoKIyBIb21lIFJhbmdlIE92ZXJsYXAgKE1DUCkKCgo8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+R2lsYSBNb25zdGVyIEhvbWUgUmFuZ2UgT3ZlcmxhcCBvZiAxMDAlIE1DUHMuPC9zcGFuPgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CgptY3BfYW5hbHlzaXMuUE9MWSA8LSBmdW5jdGlvbihmaWxlbmFtZSwgcGVyY2VudGFnZSl7CiAgZGF0YSA8LSByZWFkLmNzdihmaWxlID0gZmlsZW5hbWUsc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQogIGRhdGEuc3AgPC0gZGF0YVssIGMoIkxJWkFSRE5VTUJFUiIsICJFQVNUSU5HIiwgIk5PUlRISU5HIildCiAgY29vcmRpbmF0ZXMoZGF0YS5zcCkgPC0gYygiRUFTVElORyIsICJOT1JUSElORyIpCiAgcHJvajRzdHJpbmcoZGF0YS5zcCkgPC0gQ1JTLlNDCiAgbWNwX291dCA8LSBtY3AoZGF0YS5zcCwgcGVyY2VudGFnZSwgdW5vdXQ9ImhhIikKfQoKTTY3X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vTTY3L002NyAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpNNjlfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NNjkvTTY5IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCk0yNTVfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NMjU1L00yNTUgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKTTIxNV9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL00yMTUvTTIxNSAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpNMTRfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NMTQvTTE0IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCk0xMTlfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NMTE5L00xMTkgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKTTExMl9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL00xMTIvTTExMiAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQoKRjY2X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjY2L0Y2NiAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMzZfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMzYvRjM2IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYyNTJfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMjUyL0YyNTIgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjIxNF9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YyMTQvRjIxNCAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMjAwX01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjIwMC9GMjAwIC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMTQ3L0YxNDcgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0Nl9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YxNDYvRjE0NiAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMTM3X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjEzNy9GMTM3IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYxMzVfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMTM1L0YxMzUgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YxMTQvRjExNCAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMTA0X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjEwNC9GMTA0IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCgpNYWxlLk1DUCA8LSByYmluZChNNjdfTUNQLE02OV9NQ1AsTTI1NV9NQ1AsTTIxNV9NQ1AsTTE0X01DUCxNMTE5X01DUCxNMTEyX01DUCkKRmVtYWxlLk1DUCA8LSByYmluZChGNjZfTUNQLEYzNl9NQ1AsRjI1Ml9NQ1AsRjIxNF9NQ1AsRjIwMF9NQ1AsRjE0N19NQ1AsRjE0Nl9NQ1AsRjEzN19NQ1AsCiAgICAgICAgICAgICAgICAgICAgRjEzNV9NQ1AsRjExNF9NQ1AsRjEwNF9NQ1ApCgptYXB2aWV3T3B0aW9ucyhiYXNlbWFwcyA9IGMoIk9wZW5TdHJlZXRNYXAiLCJFc3JpLldvcmxkSW1hZ2VyeSIsIk9wZW5Ub3BvTWFwIiksCiAgICAgICAgICAgICAgIG5hLmNvbG9yID0gIm1hZ2VudGEiLAogICAgICAgICAgICAgICBsYXllcnMuY29udHJvbC5wb3MgPSAidG9wbGVmdCIpCgptYXB2aWV3KE1hbGUuTUNQLCBsZWdlbmQ9RiwgemNvbD0iaWQiLCBjb2wucmVnaW9ucyA9IGMoImJsdWUiKSwgYWxwaGEucmVnaW9ucz0wLjMpICsgCiAgbWFwdmlldyhGZW1hbGUuTUNQLCBsZWdlbmQ9RiwgemNvbCA9ICJpZCIsIGNvbC5yZWdpb25zID0gYygicmVkIiksIGFscGhhLnJlZ2lvbnM9MC4zKQpgYGAKRmlndXJlIDEzIHwgSW50ZXJhY3RpdmUgbWFwOiBIb21lIFJhbmdlIG92ZXJsYXAgYnkgc2V4IG9mIDEwMCUgTUNQcyBhdCBTdG9uZSBDYW55b24uIFJlZCBwb2x5Z29ucyByZXByZXNlbnQgZmVtYWxlIGxpemFyZHMsIGFuZCBibHVlIHJlcHJlc2VudHMgbWFsZSBsaXphcmRzLiAKCgoKCgpUaGUgU3RvbmUgQ2FueW9uIHBvcHVsYXRpb24gc2VlbXMgdG8gZXhoaWJpdCBncmVhdGVyIGZlbWFsZS1mZW1hbGUgb3ZlcmxhcCBhcyB3ZWxsIGFzIGNvbnNpZGVyYWJsZSBvdmVybGFwIG9mIG1hbGUtZmVtYWxlIGhvbWUgcmFuZ2VzLiBUaGVyZSBhcHBlYXJzIHRvIGJlIGxpbWl0ZWQgbWFsZS1tYWxlIG92ZXJsYXAsIHdpdGggb2NjdXJhbmNlIGhhcHBlbmluZyBpbiBvbmx5IHR3byBtYWxlLW1hbGUgaG9tZSByYW5nZSBwb2x5Z29ucy4gVGhpcyBmaW5kaW5nIGlzIGluIGNvbnRyYXN0IHRvIHRoZSBPd2wgSGVhZCBidXR0ZXMgc3R1ZHkgd2hpY2ggcmV2ZWFsZWQgdGhhdCB0aGVyZSB3YXMgYSBsYXJnZSBkZWdyZWUgb2Ygb3ZlcmxhcCBhbW9uZyBtYWxlLWZlbWFsZSBhbmQgbWFsZS1tYWxlIG92ZXJsYXBzIChUYWJsZSB4KS4gR2lsbGFyZG8gY29uY2x1ZGVkIHRoYXQsIGluIHRoZWlyIHN0dWR5LCB0aGUgaGlnaCBkZWdyZWUgb2Ygb3ZlcmxhcCBpbiBtYWxlcy1tYWxlcyBpbnRlcmFjdGlvbnMgbWF5IGJlIGR1ZSB0byBoYXZpbmcgbGFyZ2VyIGhvbWUgcmFuZ2VzIGZvciBtYXRlIHNlYXJjaGluZyBhY3Rpdml0aWVzLiBNYWxlcyBtYXkgaGF2ZSBhbmQgaW5jcmVhc2VkIGhvbWUgcmFuZ2Ugc2l6ZSB0byBtYXhpbWl6ZSB0aGVpciBhY2Nlc3MgdG8gbXVsdGlwbGUgZmVtYWxlcy4gU2hlIGNvbmNsdWRlZCB0aGF0IHRoZSBsYWNrIG9mIGZlbWFsZS1mZW1hbGUgb3ZlcmxhcCBtYXkgYmUgZHVlIHRvIHNtYWxsZXIgaG9tZSByYW5nZSBzaXplcy4gCgpBdCBTdG9uZSBDYW55b24sIG1hbGVzIGhhdmUgcmVkdWNlZCBob21lIHJhbmdlIHNpemVzIChUYWJsZSA2OyBGaWcuIDQpLiBIb3dldmVyLCBtYWxlcyBzdGlsbCByZXRhaW4gaG9tZSByYW5nZSBvdmVybGFwIHdpdGggbXVsdGlwbGUgZmVtYWxlcyB3aGlsZSBoYXZpbmcgcmVkdWNlZCBjb250YWN0IHdpdGggb3RoZXIgbWFsZXMuIFRoaXMgbWF5IGJlIGluIHJlc3BvbnNlIHRvIG51dHJpZW50IHN1YnNpZGllcyB0aGF0IHJlZHVjZSB0aGUgbmVlZCB0byBoYXZlIGV4cGFuZGVkIGhvbWUgcmFuZ2Ugc2l6ZXMgZm9yIGZvcmFnaW5nIGFjdGl2aXRpZXMgZm9yIGJvdGggbWFsZXMgYW5kIGZlbWFsZXMuIFRoZXJlIG1heSBhbHNvIGJlIGEgaGlnaGVyIGRlbnNpdHkgb2YgZmVtYWxlcyBhcyBhIHJlc3BvbnNlIHRvIHJlc291cmNlIGF2YWlsYWJpbGl0eSBhbmQgcmVkdWNlZCByYW5nZSByZXF1aXJlbWVudHMuIE1hbGVzIGFyZSBub3QgZm9yY2VkIHRvIGV4cGFuZCBob21lIHJhbmdlcyBmb3IgbWF0ZSBzZWFyY2hpbmcgdG8gdGhlIGV4dGFudCB0aGF0IGluZGl2aWR1YWxzIGF0IE93bCBIZWFkIEJ1dHRlcyBtYXkgYmUgc3ViamVjdCB0by4gCgoKClRhYmxlIDggfCBIb21lIHJhbmdlIG92ZXJsYXAgb2YgR2lsYSBNb25zdGVycyBhdCB0aGUgbnV0cmllbnQgc3Vic2lkaXplZCBzaXRlLiBNYWxlLW1hbGUgb3ZlcmxhcHMgb25seSBvY2N1cmVkIGJldHdlZW4gdHdvIHBhaXJzIG9mIG1hbGVzOiBNMTQtTTY5IGFuZCBNMTE5LU0yMTUgYXQgMC41IGhhLiBhbmQgMTkuNSBoYS4gcmVzcGVjdGl2ZWx5IGFuZCB3ZXJlIHRoZXJlZm9yZSBub3QgaW5jbHVkZWQgaW4gdGhlIHRhYmxlLiAKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9Ck9MX1RhYmxlPC1yZWFkLmNzdigiLi9PdmVybGFwL092ZXJMYXBfVGFibGUuY3N2IikKCmthYmxlKE9MX1RhYmxlLCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdIb21lIHJhbmdlIG92ZXJsYXAgb2YgU3RvbmUgQ2FueW9uIEdpbGEgTW9uc3RlcnMgdXNpbmcgMTAwJSBNQ1BzLicpCmBgYAoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpoci5vdmVybGFwPC1yZWFkLmNzdigiLi9PdmVybGFwL0hSX092ZXJsYXBfRGF0YS5jc3YiKQoKaHIub3ZlcmxhcC5hbmFsIDwtIHN1bW1hcnlTRShoci5vdmVybGFwLCBtZWFzdXJldmFyPSJPTCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHZhcnM9YygiSW50ZXJhY3Rpb24iKSwgbmEucm0gPSBUUlVFKQoKIyBTRUFTX0dSUF9NZWFucwprYWJsZShoci5vdmVybGFwLmFuYWwsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ0hvbWUgUmFuZ2UgT3ZlcmxhcCBTdW1tYXJ5JykKYGBgCgoKCgojIEhvbWUgUmFuZ2UgT3ZlcmxhcCAoS0RFKQoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQoKa2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbiA8LSBmdW5jdGlvbihmaWxlbmFtZSwgcGVyY2VudGFnZSl7CiAgZGF0YSA8LSByZWFkLmNzdihmaWxlID0gZmlsZW5hbWUsc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQogIGRhdGEuc3AgPC0gZGF0YVssIGMoIkxJWkFSRE5VTUJFUiIsICJFQVNUSU5HIiwgIk5PUlRISU5HIildCiAgY29vcmRpbmF0ZXMoZGF0YS5zcCkgPC0gYygiRUFTVElORyIsICJOT1JUSElORyIpCiAgcHJvajRzdHJpbmcoZGF0YS5zcCkgPC0gQ1JTLlNDCiAga2RlPC1rZXJuZWxVRChkYXRhLnNwLCBoPSJocmVmIiwga2Vybj0iYml2bm9ybSIsIGdyaWQ9MTAwMCkKICB2ZXIgPC0gZ2V0dmVydGljZXNocihrZGUsIHBlcmNlbnRhZ2UpCiAgdmVyQHByb2o0c3RyaW5nPC1DUlMuU0MKICB2ZXIKfQoKTTY3X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9NNjcvTTY3IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTY5X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9NNjkvTTY5IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTI1NV9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTI1NS9NMjU1IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTIxNV9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTIxNS9NMjE1IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTE0X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9NMTQvTTE0IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTExOV9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTExOS9NMTE5IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTExMl9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTExMi9NMTEyIC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKCkY2Nl9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vRjY2L0Y2NiAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYzNl9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vRjM2L0YzNiAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYyNTJfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YyNTIvRjI1MiAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYyMTRfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YyMTQvRjIxNCAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYyMDBfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YyMDAvRjIwMCAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxNDdfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxNDcvRjE0NyAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxNDZfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxNDYvRjE0NiAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxMzdfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxMzcvRjEzNyAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxMzVfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxMzUvRjEzNSAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxMTRfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxMTQvRjExNCAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxMDRfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxMDQvRjEwNCAuY3N2JywgcGVyY2VudGFnZT0gOTUpCgpNYWxlLktERSA8LSByYmluZChNNjdfS0RFLE02OV9LREUsTTI1NV9LREUsTTIxNV9LREUsTTE0X0tERSxNMTE5X0tERSxNMTEyX0tERSkKRmVtYWxlLktERSA8LSByYmluZChGNjZfS0RFLEYzNl9LREUsRjI1Ml9LREUsRjIxNF9LREUsRjIwMF9LREUsRjE0N19LREUsRjE0Nl9LREUsRjEzN19LREUsCiAgICAgICAgICAgICAgICAgICAgRjEzNV9LREUsRjExNF9LREUsRjEwNF9LREUpCgptYXB2aWV3T3B0aW9ucyhiYXNlbWFwcyA9IGMoIk9wZW5TdHJlZXRNYXAiLCJFc3JpLldvcmxkSW1hZ2VyeSIsIk9wZW5Ub3BvTWFwIiksCiAgICAgICAgICAgICAgIG5hLmNvbG9yID0gIm1hZ2VudGEiLAogICAgICAgICAgICAgICBsYXllcnMuY29udHJvbC5wb3MgPSAidG9wbGVmdCIpCgptYXB2aWV3KE1hbGUuS0RFLCBsZWdlbmQ9RiwgemNvbD0iaWQiLCBjb2wucmVnaW9ucyA9IGMoImJsdWUiKSwgYWxwaGEucmVnaW9ucz0wLjMpICsgCiAgbWFwdmlldyhGZW1hbGUuS0RFLCBsZWdlbmQ9RiwgemNvbCA9ICJpZCIsIGNvbC5yZWdpb25zID0gYygicmVkIiksIGFscGhhLnJlZ2lvbnM9MC4zKQpgYGAKRmlndXJlIDE0IHwgSW50ZXJhY3RpdmUgbWFwOiBIb21lIFJhbmdlIG92ZXJsYXAgYnkgc2V4IG9mIDk1JSBLREVzIGF0IFN0b25lIENhbnlvbi4gUmVkIHBvbHlnb25zIHJlcHJlc2VudCBmZW1hbGUgbGl6YXJkcywgYW5kIGJsdWUgcmVwcmVzZW50cyBtYWxlIGxpemFyZHMuIAoKCgoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1UUlVFfQoKIyBrZGVfYW5hbHlzaXMuaHJlZi5yYXN0ZXIgPC0gZnVuY3Rpb24oZmlsZW5hbWUpewojICAgZGF0YSA8LSByZWFkLmNzdihmaWxlID0gZmlsZW5hbWUpCiMgICB4IDwtIGFzLmRhdGEuZnJhbWUoZGF0YSRFQVNUSU5HKQojICAgeSA8LSBhcy5kYXRhLmZyYW1lKGRhdGEkTk9SVEhJTkcpCiMgICB4eSA8LSBjKHgseSkKIyAgIGRhdGEucHJvaiA8LSBTcGF0aWFsUG9pbnRzRGF0YUZyYW1lKHh5LGRhdGEsIHByb2o0c3RyaW5nID0gQ1JTLlNDKQojICAgeHkgPC0gU3BhdGlhbFBvaW50cyhkYXRhLnByb2pAY29vcmRzKQojICAga2RlPC1rZXJuZWxVRCh4eSwgaD0iaHJlZiIsIGtlcm49ImJpdm5vcm0iLCBncmlkPTEwMDApCiMgICBrZGVAcHJvajRzdHJpbmc8LSBDUlMuU0MKIyAgIGtkZQojIH0KCk0xMTIucmFzdGVyLm91dHB1dDwta2RlX2FuYWx5c2lzLmhyZWYucmFzdGVyKCIuL00xMTIvTTExMiAuY3N2IikKRjExNC5yYXN0ZXIub3V0cHV0PC1rZGVfYW5hbHlzaXMuaHJlZi5yYXN0ZXIoIi4vRjExNC9GMTE0IC5jc3YiKQpGMjAwLnJhc3Rlci5vdXRwdXQ8LWtkZV9hbmFseXNpcy5ocmVmLnJhc3RlcigiLi9GMjAwL0YyMDAgLmNzdiIpCiMgcGxvdChNMTEyLnJhc3Rlci5vdXRwdXQpCiMgbWFwdmlldyhNMTEyLnJhc3Rlci5vdXRwdXQsIGFscGhhLnJlZ2lvbnM9MC44KQoKTTExMi5yYXN0ZXI8LXJhc3RlcihNMTEyLnJhc3Rlci5vdXRwdXQpCkYxMTQucmFzdGVyPC1yYXN0ZXIoRjExNC5yYXN0ZXIub3V0cHV0KQpGMjAwLnJhc3RlcjwtcmFzdGVyKEYyMDAucmFzdGVyLm91dHB1dCkKCgpsaWJyYXJ5KHRtYXApCiMgY3JlYXRlcyBhIGJvdW5kaW5nIGJveCBiYXNlZCBvbiB0aGUgZXh0ZW50cyBvZiB0aGUgcG9seWdvbgojYm91bmRpbmdfYm94IDwtIGJiKE91dHB1dC5BcmVhcykKTTExMi5iYiA8LSBNMTEyX0tERUBiYm94CkYxMTQuYmIgPC0gRjExNF9LREVAYmJveApGMjAwLmJiIDwtIEYyMDBfS0RFQGJib3gKCgojIG1hcHMgdGhlIHJhc3RlciB3aXRoaW4gdGhlIGJvdW5kaW5nIGJveAojIHRtX3NoYXBlKE0xMTIucmFzdGVyLCBiYm94ID0gTTExMi5iYikgKyB0bV9yYXN0ZXIoInVkIikKCiMgbWFzayB0aGUgcmFzdGVyIGJ5IHRoZSBvdXRwdXQgYXJlYSBwb2x5Z29uCk0xMTIubWFza2VkIDwtIG1hc2soTTExMi5yYXN0ZXIsIE0xMTJfS0RFKQojIE0xMTIubWFza2VkW2lzLm5hKE0xMTIubWFza2VkKV0gPC0gMApGMTE0Lm1hc2tlZCA8LSBtYXNrKEYxMTQucmFzdGVyLCBGMTE0X0tERSkKIyBGMTE0Lm1hc2tlZFtpcy5uYShGMTE0Lm1hc2tlZCldIDwtIDAKRjIwMC5tYXNrZWQgPC0gbWFzayhGMjAwLnJhc3RlciwgRjIwMF9LREUpCiMgRjIwMC5tYXNrZWRbaXMubmEoRjIwMC5tYXNrZWQpXSA8LSAwCgpwbG90KE0xMTIubWFza2VkKQojIG1hcHZpZXcoTTExMi5tYXNrZWQsIGFscGhhLnJlZ2lvbnM9MC42KQoKdG1fbGF5b3V0KG1haW4udGl0bGU9Ik0xMTIgRjExNCBhbmQgRjIwMCBLREUgT3ZlcmxhcCIpK3RtX3NoYXBlKE0xMTIubWFza2VkKSArCiAgdG1fcmFzdGVyKCJ1ZCIsIHN0eWxlID0gInF1YW50aWxlIiwgbiA9IDEwMCwgbGVnZW5kLnNob3cgPSBGQUxTRSwgcGFsZXR0ZSA9ICItWWxHbkJ1IikgKwogIHRtX3NoYXBlKEYxMTQubWFza2VkKSArIAogIHRtX3Jhc3RlcigidWQiLCBzdHlsZSA9ICJxdWFudGlsZSIsIG4gPSAxMDAsIGxlZ2VuZC5zaG93ID0gRkFMU0UsIHBhbGV0dGUgPSAiLVlsR25CdSIpICsKICB0bV9zaGFwZShGMjAwLm1hc2tlZCkgKwogIHRtX3Jhc3RlcigidWQiLCBzdHlsZSA9ICJxdWFudGlsZSIsIG4gPSAxMDAsIGxlZ2VuZC5zaG93ID0gRkFMU0UsIHBhbGV0dGUgPSAiLVlsR25CdSIpICsKICB0bV9zaGFwZShNMTEyX0tERSkgKyAKICB0bV9ib3JkZXJzKGFscGhhPS4zLCBjb2wgPSAiYmxhY2siKSArIAogIHRtX3NoYXBlKEYxMTRfS0RFKSArIAogIHRtX2JvcmRlcnMoYWxwaGE9LjMsIGNvbCA9ICJibGFjayIpICsgCiAgdG1fc2hhcGUoRjIwMF9LREUpICsgCiAgdG1fYm9yZGVycyhhbHBoYT0uMywgY29sID0gImJsYWNrIikgKwogIHRtX2xheW91dChmcmFtZSA9IEZBTFNFKQogIAojICwgYmJveCA9IE0xMTIuYmIKIyBjb21wdXRlIGhvbWVyYW5nZXMgZm9yIDUwJSwgOTUlIG9mIHBvaW50cywgb2JqZWN0cyBhcmUgcmV0dXJuZWQgYXMgc3BhdGlhbCBwb2x5Z29uIGRhdGEgZnJhbWVzCk0xMTIucmFuZ2U5NSA8LSBnZXR2ZXJ0aWNlc2hyKE0xMTIucmFzdGVyLm91dHB1dCwgcGVyY2VudCA9IDk1KQpNMTEyLnJhbmdlNTAgPC0gZ2V0dmVydGljZXNocihNMTEyLnJhc3Rlci5vdXRwdXQsIHBlcmNlbnQgPSA1MCkKRjExNC5yYW5nZTk1IDwtIGdldHZlcnRpY2VzaHIoRjExNC5yYXN0ZXIub3V0cHV0LCBwZXJjZW50ID0gOTUpCkYxMTQucmFuZ2U1MCA8LSBnZXR2ZXJ0aWNlc2hyKEYxMTQucmFzdGVyLm91dHB1dCwgcGVyY2VudCA9IDUwKQpGMjAwLnJhbmdlOTUgPC0gZ2V0dmVydGljZXNocihGMjAwLnJhc3Rlci5vdXRwdXQsIHBlcmNlbnQgPSA5NSkKRjIwMC5yYW5nZTUwIDwtIGdldHZlcnRpY2VzaHIoRjIwMC5yYXN0ZXIub3V0cHV0LCBwZXJjZW50ID0gNTApCgp0bV9sYXlvdXQobWFpbi50aXRsZT0iTTExMiBGMTE0IGFuZCBGMjAwIEtERSBPdmVybGFwIikrCnRtX3NoYXBlKE0xMTIucmFuZ2U5NSkgKyAKICB0bV9ib3JkZXJzKGFscGhhPS43LCBjb2wgPSAiI2ZiNmE0YSIsIGx3ZCA9IDIpICsgdG1fZmlsbChhbHBoYT0uMSwgY29sID0gIiNmYjZhNGEiKSArCnRtX3NoYXBlKE0xMTIucmFuZ2U1MCkgKyB0bV9ib3JkZXJzKGFscGhhPS43LCBjb2wgPSAiI2RlMmQyNiIsIGx3ZCA9IDIpICsgdG1fZmlsbChhbHBoYT0uMSwgY29sID0gIiNkZTJkMjYiKSArCnRtX2xheW91dChmcmFtZSA9IEZBTFNFKSArCnRtX3NoYXBlKEYxMTQucmFuZ2U5NSkgKyB0bV9ib3JkZXJzKGFscGhhPS43LCBjb2wgPSAiI2ZiNmE0YSIsIGx3ZCA9IDIpICsgdG1fZmlsbChhbHBoYT0uMSwgY29sID0gIiNmYjZhNGEiKSArCnRtX3NoYXBlKEYxMTQucmFuZ2U1MCkgKyB0bV9ib3JkZXJzKGFscGhhPS43LCBjb2wgPSAiI2RlMmQyNiIsIGx3ZCA9IDIpICsgdG1fZmlsbChhbHBoYT0uMSwgY29sID0gIiNkZTJkMjYiKSArCnRtX2xheW91dChmcmFtZSA9IEZBTFNFKSArIAp0bV9zaGFwZShGMjAwLnJhbmdlOTUpICsgdG1fYm9yZGVycyhhbHBoYT0uNywgY29sID0gIiNmYjZhNGEiLCBsd2QgPSAyKSArIHRtX2ZpbGwoYWxwaGE9LjEsIGNvbCA9ICIjZmI2YTRhIikgKwp0bV9zaGFwZShGMjAwLnJhbmdlNTApICsgdG1fYm9yZGVycyhhbHBoYT0uNywgY29sID0gIiNkZTJkMjYiLCBsd2QgPSAyKSArIHRtX2ZpbGwoYWxwaGE9LjEsIGNvbCA9ICIjZGUyZDI2IikgKwp0bV9sYXlvdXQoZnJhbWUgPSBGQUxTRSkKCiMjIHdyaXRlIHJhc3RlciBmaWxlcyB0byBjb21wdXRlcjogCiMgd3JpdGVSYXN0ZXIobWFza2VkX2tkZSwgZmlsZW5hbWUgPSAia2VybmVsX2RlbnNpdHkudGlmIikKYGBgCgoKCgo=